¿Cuál es la forma más limpia de validar una dirección de correo electrónico que un usuario ingresa en iOS 2.0?
NOTA : Esta es una pregunta histórica que es específica de iOS 2.0 y debido a su antigüedad y a cuántas otras preguntas están vinculadas, no se puede retirar y NO DEBE cambiarse a una pregunta "moderna".
cocoa-touch
email-validation
iphone-sdk-2
Marcus S. Zarra
fuente
fuente
NSDataDetector
para validar las direcciones de correo electrónico: stackoverflow.com/a/23547905/257550Respuestas:
La respuesta a Usar una expresión regular para validar una dirección de correo electrónico explica con gran detalle que la gramática especificada en RFC 5322 es demasiado complicada para las expresiones regulares primitivas.
Recomiendo un enfoque de analizador real como MKEmailAddress .
Como solución rápida de expresiones regulares, vea esta modificación de DHValidation :
fuente
@"[^@]+@[^.@]+(\\.[^.@]+)+"
si necesita verificar una dirección de correo electrónico, envíele un mensaje y vea si tiene éxito. Nunca lo verificará con ningún nivel de precisión solo con una expresión regular, por lo que es mejor no molestar a los usuarios y perder registros debido a una expresión regular innecesariamente estricta.Lee el RFC. Casi todos los que piensan que saben cómo analizar / limpiar / validar una dirección de correo electrónico están equivocados.
http://tools.ietf.org/html/rfc2822 La sección 3.4.1 es muy útil. aviso
Sí, eso significa que +, ', etc. son todos legítimos.
fuente
La mejor solución que he encontrado hasta ahora (y con la que terminé yendo) es agregar RegexKitLite al proyecto que da acceso a expresiones regulares a través de Categorías NSString.
Es bastante sencillo agregar al proyecto y una vez implementado, cualquiera de las lógicas de validación de correo electrónico de expresión regular funcionará.
fuente
Un buen comienzo es decidir qué quieres y qué no quieres aceptar como dirección de correo electrónico.
El 99% de las direcciones de correo electrónico se ven así: [email protected] o [email protected]
Sin embargo, técnicamente es legal tener una dirección de correo electrónico como esta: f
!#$%&'*+-/=?^_
{|} ~ "ha!" @ ComProbablemente solo haya un puñado de correos electrónicos válidos en el mundo para dominios de nivel superior, y casi nadie usa la mayoría de esos otros caracteres (especialmente comillas y comillas), por lo que es posible que desee asumir que todas estas son cosas no válidas para hacer. Pero debe hacerlo como una decisión consciente.
Más allá de eso, haga lo que dice Paul e intente hacer coincidir la entrada con una expresión regular como esta: ^ [A-Z0-9 ._% + -] + @ [A-Z0-9 .-] +. [AZ] { 2,} $
Ese coincidirá con la dirección de correo electrónico de casi todos.
fuente
Si bien el enfoque en las expresiones regulares es bueno, este es solo un primer y necesario paso. Hay otros pasos que también deben tenerse en cuenta para una buena estrategia de validación.
Dos cosas encima de mi cabeza son:
Validación de DNS para asegurarse de que el dominio realmente exista.
Después de la validación dns, también puede optar por hacer una validación smtp. envíe una llamada al servidor smtp para ver si el usuario realmente existe.
De esta forma, puede detectar todo tipo de errores de usuario y asegurarse de que sea un correo electrónico válido.
fuente
Esta función es simple y, sin embargo, verifica la dirección de correo electrónico más a fondo. Por ejemplo, de acuerdo con RFC2822, una dirección de correo electrónico no debe contener dos puntos seguidos, como el nombre de pila ... el nombre de pila @ dominio..com
También es importante usar anclas en expresiones regulares como se ve en esta función. Sin anclajes, la siguiente dirección de correo electrónico se considera válida: primer nombre; [email protected] (bla porque la sección [email protected] es válida, ignorando el primer nombre) al principio y (bla al final). motor de expresiones regulares para validar todo el correo electrónico.
Esta función utiliza NSPredicate, que no existe en iOS 2. Desafortunadamente, puede que no ayude al autor de la pregunta, pero con suerte ayudará a otros con versiones más recientes de iOS. Sin embargo, las expresiones regulares en esta función aún se pueden aplicar a RegExKitLite en iOS 2. Y para aquellos que usan iOS 4 o posterior, estas expresiones regulares se pueden implementar con NSRegularExpression.
Vea validar la dirección de correo electrónico utilizando expresiones regulares en Objective-C .
fuente
fuente
He descubierto que usar una expresión regular funciona bastante bien para validar una dirección de correo electrónico.
El principal inconveniente de las expresiones regulares, por supuesto, es la facilidad de mantenimiento, así que comente como nunca lo ha hecho antes. Te lo prometo, si no lo haces, desearás haberlo hecho cuando vuelvas a la expresión después de unas semanas.
Aquí hay un enlace a una buena fuente, http://www.regular-expressions.info/email.html .
fuente
Desenterrando la tierra, pero me topé con SHEmailValidator que hace un trabajo perfecto y tiene una interfaz agradable.
fuente
Muchos sitios web proporcionan RegExes, pero haría bien en aprenderlos y comprenderlos, así como verificar que lo que desea que haga satisfaga sus necesidades dentro del RFC oficial para formatos de dirección de correo electrónico.
Para aprender RegEx, los idiomas interpretados pueden ser un gran simplificador y un banco de pruebas. Rubular se basa en Ruby, pero es una buena forma rápida de probar y verificar: http://www.rubular.com/
Más allá de eso, compre la última edición del libro O'Reilly Mastering Regular Expressions. Querrá pasar el tiempo para comprender los primeros 3 o 4 capítulos. Todo después de eso será desarrollar experiencia en el uso de RegEx altamente optimizado.
A menudo, una serie de RegExes más pequeños y fáciles de administrar son más fáciles de mantener y depurar.
fuente
Aquí hay una extensión de String que valida un correo electrónico en Swift.
Copiado de la respuesta a: Verifique que una dirección de correo electrónico sea válida en iOS
fuente
NSPredicate
en iOS 2.0No debe intentar utilizar expresiones regulares para validar un correo electrónico. Con los TLD que cambian constantemente, su validador es incompleto o inexacto. En su lugar, debe aprovechar las
NSDataDetector
bibliotecas de Apple que tomarán una cadena e intentarán ver si hay campos de datos conocidos (correos electrónicos, direcciones, fechas, etc.). ¡El SDK de Apple hará todo lo posible por mantenerse al día con los TLD y usted puede aprovechar sus esfuerzos! :)Además, si iMessage (o cualquier otro campo de texto) no cree que sea un correo electrónico, ¿debería considerar un correo electrónico?
Puse esta función en una
NSString
categoría, por lo que la cadena que está probando esself
.o como una
String
extensión rápidafuente
validate email objective-c
, esta pregunta es el tercer resultado. Algunas cosas en internet no envejecen. :-)NSDataDetector
NO existía en iOS 2.0, que es de lo que se trataba esta pregunta.fuente
NSPredicate
no existía en iOS 2; no se agregó hasta iOS 3.