합리적인 해결책은 다음과 같습니다.
"합리적인 솔루션"
많은 대용량 앱에서 수년 동안 사용 및 테스트되었습니다.
1- 이 제안에서 자주 볼 수있는 많은 끔찍한 정규식 실수 를 피합니다.
2-그렇지 않습니다 특정 RFC에서 유효하다고 생각되지만 완전히 어리 석고 이메일로 사용할 수 없으며 지원 담당자가 즉시 거부 할 수있는 "x @ x"와 같은 어리석은 이메일 허용 메일러 서비스 (mailchimp, google, aws 등)는 단순히 거부합니다. 어떤 이유로 'x @ x'와 같은 문자열을 허용하는 솔루션이 필요한 경우 다른 솔루션을 사용하십시오.
3-코드는 매우 이해하기 쉽다
4-KISS이며 신뢰할 수 있으며 수많은 사용자가있는 상업용 앱에서 테스트를 거쳤습니다.
5-기술 요점, 술어 는 Apple이 말한 것처럼 전제 조건 입니다 (이것이없는 코드 제안을 조심하십시오)
let __firstpart = "[A-Z0-9a-z]([A-Z0-9a-z._%+-]{0,30}[A-Z0-9a-z])?"
let __serverpart = "([A-Z0-9a-z]([A-Z0-9a-z-]{0,30}[A-Z0-9a-z])?\\.){1,5}"
let __emailRegex = __firstpart + "@" + __serverpart + "[A-Za-z]{2,8}"
let __emailPredicate = NSPredicate(format: "SELF MATCHES %@", __emailRegex)
extension String {
func isEmail() -> Bool {
return __emailPredicate.evaluate(with: self)
}
}
extension UITextField {
func isEmail() -> Bool {
return self.text!.isEmail()
}
}
그렇게 쉽습니다.
설명:
이하의 설명에서, "OC"는 문자 또는 숫자와 같은 일반적인 문자를 의미한다.
__firstpart ...는 OC 로 시작하고 끝나야 합니다. 중간에 있는 문자의 경우 밑줄과 같은 특정 문자 를 사용할 수 있지만 시작과 끝 은 OC 여야합니다. (단, 하나의 OC 만 있으면 괜찮 습니다 (예 : j@blah.com)).
__serverpart ... "blah"와 같은 섹션 이 있습니다 . 이는 반복합니다 . (따라서 mail.city.fcu.edu 유형의 것입니다.) 섹션은 OC 로 시작하고 끝나야 하지만 가운데 에는 대시 "-" 가있을 수도 있습니다 . (허용하려는 경우 다른 거기에 이상한 문자, 아마 밑줄을 단순히 대시 전에 추가합니다.) 그것은의 확인을 그냥 섹션 가지고 하나의 OC를. (joe@w.campus.edu에서와 같이) 최대 5 개의 섹션을 가질 수 있으며 하나 를 가져야합니다. 마지막으로 TLD (예 : .com)의 크기 는 엄격하게 2-8입니다.. 지원 부서에서 선호하는대로 "8"만 변경하십시오.
중요!
술어를 전역으로 유지해야하며 매번 작성하지 마십시오.
이것이 문서 의 전체 문제 에 대해 Apple이 언급 한 첫 번째 사항 입니다.
술어를 캐시하지 않는 제안을 볼 때 매우 놀랍습니다.