Aquí está la solución razonable:
"LA SOLUCIÓN RAZONABLE"
Usado y probado durante años en muchas aplicaciones de gran volumen.
1 - evita los muchos errores terribles de expresiones regulares que a menudo ves en estas sugerencias
2 - NO permite correos electrónicos estúpidos como "x @ x" que se consideran válidos bajo ciertos RFC, pero son completamente tontos, no pueden usarse como correos electrónicos, y que su personal de soporte rechazaría instantáneamente, y que todos los servicios de correo (mailchimp, google, aws, etc.) simplemente rechazan. Si (por alguna razón) necesita una solución que permita cadenas como 'x @ x', use otra solución.
3 - el código es muy, muy, muy comprensible
4: es KISS, confiable y probado hasta la destrucción en aplicaciones comerciales con un enorme número de usuarios
5 - un punto técnico, el predicado es global, como Apple dice que debería ser (cuidado con las sugerencias de código que no tienen esto)
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()
}
}
Es fácil.
Explicación:
En la siguiente descripción, "OC" significa carácter ordinario: una letra o un dígito.
__primera parte ... tiene que comenzar y terminar con un OC. Para los caracteres en el medio , puede tener ciertos caracteres como el subrayado, pero el inicio y el final deben ser un OC. (Sin embargo, está bien tener solo un OC y eso es todo, por ejemplo: j@blah.com)
__serverpart ... Tienes secciones como "bla". que repiten . (Entonces, el tipo de cosas mail.city.fcu.edu.) Las secciones tienen que comenzar y terminar con un OC, pero en el medio también puede tener un guión "-". (Si desea permitir otros caracteres inusuales allí, quizás el guión bajo, simplemente agregue antes del guión). Está bien tener una sección que sea solo un OC. (Como en joe@w.campus.edu) Puede tener hasta cinco secciones, debe tener una. Finalmente el TLD (como .com) tiene un tamaño estrictamente de 2 a 8 . Obviamente, simplemente cambie ese "8" según lo prefiera su departamento de soporte.
¡IMPORTANTE!
Debe mantener el predicado como global, no lo construya siempre.
Tenga en cuenta que esto es lo primero que Apple menciona sobre todo el problema en los documentos.
Es muy sorprendente cuando ve sugerencias que no almacenan en caché el predicado.