(Präambel. Beachten Sie, dass Sie in einigen Fällen diese Lösung jetzt in iOS integriert verwenden können: https://multithreaded.stitchfix.com/blog/2016/11/02/email-validation-swift/)
Die einzige Lösung:
1 - es vermeidet die grausamen Regex-Fehler, die oft im Beispielcode zu sehen sind
2 - es erlaubt KEINE absurden E-Mails wie "x@x"
(Wenn Sie aus irgendeinem Grund eine Lösung benötigen, die unsinnige Zeichenfolgen wie 'x@x' zulässt, verwenden Sie eine andere Lösung.)
3 - der Code ist extrem verständlich
4 - es ist KISS, zuverlässig und auf kommerziellen Apps mit enorm vielen Benutzern getestet
5 - das Prädikat ist global, wie Apple sagt, dass es sein muss
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() ?? false
}
}
Es ist so einfach.
Erklärung für jeden, der neu in Regex ist:
In dieser Beschreibung bedeutet "OC" gewöhnliches Zeichen - ein Buchstabe oder eine Ziffer.
__firstpart ... muss mit einem OC starten und enden. Für die Zeichen in der Mitte können Sie bestimmte Zeichen wie Unterstrich haben, aber der Anfang und das Ende müssen ein OC sein. (Es ist jedoch in Ordnung, nur ein OC zu haben und das war's, zum Beispiel: j@blah.com)
__serverpart ... Sie haben Abschnitte wie "blah.", die sich wiederholen. (Beispiel, mail.city.fcu.edu.) Die Abschnitte müssen mit einem OC beginnen und enden, aber in der Mitte können Sie auch ein Bindestrich haben. Es ist in Ordnung, einen Abschnitt zu haben, der nur ein OC ist. (Beispiel, w.campus.edu) Sie können bis zu fünf Abschnitte haben, Sie müssen einen haben. Schließlich ist die TLD (zum Beispiel .com) strikt 2 bis 8 groß. (Ändern Sie natürlich einfach die "8", wie es Ihr Support-Team bevorzugt.)
WICHTIG!
Sie MÜSSEN das Prädikat als global belassen, bauen Sie es nicht jedes Mal neu.
Beachten Sie, dass dies das Erste ist, was Apple in den Dokumenten über das gesamte Problem erwähnt.
Vorschläge, die das Prädikat nicht zwischenspeichern, haben keine Chance.
Nicht-englische Alphabete
Natürlich, wenn Sie mit nicht-englischen Alphabeten umgehen, passen Sie entsprechend an.