Voici la solution raisonnable:
"LA SOLUTION RAISONNABLE"
Utilisé et testé pendant des années dans de nombreuses applications à volume énorme.
1 - cela évite les nombreuses erreurs de regex terribles que vous voyez souvent dans ces suggestions
2 - il n'autorise PAS les e-mails stupides tels que "x @ x" qui sont considérés comme valides sous certains RFC, mais qui sont complètement stupides, ne peuvent pas être utilisés comme e-mails, et que votre personnel de support rejetterait instantanément, et que tous les services de messagerie (mailchimp, google, aws, etc.) refusent tout simplement. Si (pour une raison quelconque) vous avez besoin d'une solution qui autorise des chaînes telles que 'x @ x', utilisez une autre solution.
3 - le code est très, très, très compréhensible
4 - il est KISS, fiable et testé à la destruction sur les applications commerciales avec un grand nombre d'utilisateurs
5 - un point technique, le prédicat est un global, comme Apple le dit (faites attention aux suggestions de code qui ne l'ont pas)
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()
}
}
C'est si facile.
Explication:
Dans la description suivante, "OC" signifie un caractère ordinaire - une lettre ou un chiffre.
__firstpart ... doit commencer et se terminer par un OC. Pour les caractères du milieu, vous pouvez avoir certains caractères tels que le trait de soulignement, mais le début et la fin doivent être un OC. (Cependant, c'est ok d'avoir un seul OC et c'est tout, par exemple: j@blah.com)
__serverpart ... Vous avez des sections comme "blah". qui se répètent . (Donc type de chose mail.city.fcu.edu.) Les sections doivent commencer et se terminer par un OC, mais au milieu vous pouvez également avoir un tiret "-". (Si vous souhaitez autoriser d' autres caractères inhabituels, peut-être le trait de soulignement, ajoutez-le simplement avant le tiret.) C'est OK d'avoir une section qui n'est qu'un OC. (Comme dans joe@w.campus.edu) Vous pouvez avoir jusqu'à cinq sections, vous devez en avoir une. Enfin , le TLD (.com) est strictement 2 à 8 en taille. Évidemment, changez simplement ce "8" selon les préférences de votre service d'assistance.
IMPORTANT!
Vous devez conserver le prédicat en tant que global, ne pas le construire à chaque fois.
Notez que c'est la première chose qu'Apple mentionne sur tout le problème dans les documents.
C'est très surprenant lorsque vous voyez des suggestions qui ne mettent pas en cache le prédicat.