ここに合理的な解決策があります:
「リーズナブルなソリューション」
多くの膨大な量のアプリで長年使用およびテストされています。
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である必要があります。(ただし、それはだOK:j@blah.com一つだけOCを持っているし、それはそれだ、など)
__serverpart ...「何とか」のようなセクションがあります。これの繰り返し。(したがって、mail.city.fcu.eduタイプのものです。)セクションはOCで開始および終了する必要がありますが、途中にダッシュ「-」を付けることもできます。(許可したい場合は、他のそこに異常な文字、おそらくアンダー、単にダッシュの前に追加します。)それのOKをちょうどある部分持っている1つの OCを。(joe@w.campus.eduと同様)セクションは5つまで作成できますが、セクションを1つ作成する必要があります。最後に、TLD(.comなど)のサイズは厳密に2〜8 です。。明らかに、サポート部門の希望に応じて、その「8」を変更してください。
重要!
述語をグローバルとして保持する必要があります。毎回構築しないでください。
これは、アップルがドキュメント全体の問題について最初に言及したものであることに注意してください。
述語をキャッシュしない提案を見ると、それは非常に驚くべきことです。