objective c - solucion - Comprueba que una dirección de correo electrónico es válida en iOS
imposible verificar identidad del servidor iphone 8 (4)
Posible duplicado:
¿Mejores prácticas para validar la dirección de correo electrónico en Objective-C en iOS 2.0?
Estoy desarrollando una aplicación para iPhone donde necesito que el usuario dé su dirección de correo electrónico al iniciar sesión.
¿Cuál es la mejor manera de verificar si una dirección de correo electrónico es una dirección de correo electrónico válida?
Aquí hay una buena con NSRegularExpression que está funcionando para mí.
[text rangeOfString:@"^.+@.+//..{2,}$" options:NSRegularExpressionSearch].location != NSNotFound;
Puede insertar cualquier expresión regular que desee, pero me gusta poder hacerlo en una sola línea.
Buena función de cacao:
-(BOOL) NSStringIsValidEmail:(NSString *)checkString
{
BOOL stricterFilter = NO; // Discussion http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/
NSString *stricterFilterString = @"^[A-Z0-9a-z//._%+-]+@([A-Za-z0-9-]+//.)+[A-Za-z]{2,4}$";
NSString *laxString = @"^.+@([A-Za-z0-9-]+//.)+[A-Za-z]{2}[A-Za-z]*$";
NSString *emailRegex = stricterFilter ? stricterFilterString : laxString;
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTest evaluateWithObject:checkString];
}
Discusión sobre Lax vs. Strict - http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/
Y como las categorías son mejores, también puedes agregar una interfaz:
@interface NSString (emailValidation)
- (BOOL)isValidEmail;
@end
Implementar
@implementation NSString (emailValidation)
-(BOOL)isValidEmail
{
BOOL stricterFilter = NO; // Discussion http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/
NSString *stricterFilterString = @"^[A-Z0-9a-z//._%+-]+@([A-Za-z0-9-]+//.)+[A-Za-z]{2,4}$";
NSString *laxString = @"^.+@([A-Za-z0-9-]+//.)+[A-Za-z]{2}[A-Za-z]*$";
NSString *emailRegex = stricterFilter ? stricterFilterString : laxString;
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTest evaluateWithObject:self];
}
@end
Y luego utilizar:
if([@"[email protected]" isValidEmail]) { /* True */ }
if([@"InvalidEmail@notreallyemailbecausenosuffix" isValidEmail]) { /* False */ }
Para verificar si una variable de cadena contiene una dirección de correo electrónico válida, la forma más sencilla es probarla con una expresión regular. Hay una buena discusión de varias expresiones regulares y sus compensaciones en regular-expressions.info .
Aquí hay una relativamente simple que se inclina en el lado de permitir algunas direcciones no válidas a través de: ^[A-Z0-9._%+-]+@[A-Z0-9.-]+/.[AZ]{2,6}$
La forma en que puede usar expresiones regulares depende de la versión de iOS que esté usando.
iOS 4.x y posteriores
Puede usar NSRegularExpression
, que le permite compilar y probar directamente una expresión regular.
iOS 3.x
No incluye la clase NSRegularExpression
, pero sí incluye NSPredicate
, que puede coincidir con expresiones regulares.
NSString *emailRegex = ...;
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
BOOL isValid = [emailTest evaluateWithObject:checkString];
Lea un artículo completo sobre este enfoque en cocoawithlove.com .
iOS 2.x
No incluye ninguna coincidencia de expresiones regulares en las bibliotecas de Cocoa. Sin embargo, puede incluir fácilmente RegexKit Lite en su proyecto, que le da acceso a las API de expresiones regulares de nivel C incluidas en iOS 2.0.
para validar la cadena de correo electrónico, tendrá que escribir una expresión regular para verificar que esté en la forma correcta. Hay muchos en la web, pero tenga cuidado, ya que algunos pueden excluir las direcciones legales.
esencialmente se verá algo como esto
^((?>[a-zA-Z/d!#$%&''*+/-/=?^_`{|}~]+/x20*|"((?=[/x01-/x7f])[^"//]|//[/x01-/x7f])*"/x20*)*(?<angle><))?((?!/.)(?>/.?[a-zA-Z/d!#$%&''*+/-/=?^_`{|}~]+)+|"((?=[/x01-/x7f])[^"//]|//[/x01-/x7f])*")@(((?!-)[a-zA-Z/d/-]+(?<!-)/.)+[a-zA-Z]{2,}|/[(((?(?<!/[)/.)(25[0-5]|2[0-4]/d|[01]?/d?/d)){4}|[a-zA-Z/d/-]*[a-zA-Z/d]:((?=[/x01-/x7f])[^///[/]]|//[/x01-/x7f])+)/])(?(angle)>)$
En realidad, comprobar si el correo electrónico existe y no rebotar significaría enviar un correo electrónico y ver cuál fue el resultado. Es decir, rebotó o no lo hizo. Sin embargo, es posible que no rebote durante varias horas o que no lo haga en absoluto y aún así no sea una dirección de correo electrónico "real". Hay una serie de servicios que pretenden hacer esto por usted y que probablemente usted pagaría y, francamente, ¿por qué molestarse en ver si es real?
Es bueno comprobar que el usuario no haya escrito incorrectamente su correo electrónico, de lo contrario, podría ingresarlo de manera incorrecta, no darse cuenta y luego ser hackeado por usted para no responder. Sin embargo, si alguien desea agregar una dirección de correo electrónico vago, no habrá nada que impida que lo creen en hotmail o yahoo (o en muchos otros lugares) para obtener el mismo fin.
Haga lo mismo con la expresión regular y valide la estructura, pero olvídese de la validación contra un servicio.