NSRegularExpression validar correo electrónico

Quiero usar la class NSRegularExpression para validar si una NSString es una dirección de correo electrónico.

Algo así como este pseudocódigo:

 - (BOOL)validateMail : (NSString *)email { NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:@"" options:NSRegularExpressionCaseInsensitive error:NULL]; if(emailValidated) { return YES; }else{ return NO; } } 

Pero no sé exactamente cómo validar un NSString si se parece a este "email@stackoverflow.com"

Quizás alguien pueda ayudarme aquí.

Saludos s4lfish

Puedes usar:

 @"^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}$"; // Edited: added ^ and $ 

Puedes probarlo aquí:

http://gskinner.com/RegExr/?2rhq7

Y guarda este enlace que te ayudará con Regex en el futuro:

http://gskinner.com/RegExr/

EDITAR

Puedes hacerlo de esta manera:

  NSString *string = @"shannoga@me.com"; NSString *expression = @"^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}$"; // Edited: added ^ and $ NSError *error = NULL; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression options:NSRegularExpressionCaseInsensitive error:&error]; NSTextCheckingResult *match = [regex firstMatchInString:string options:0 range:NSMakeRange(0, [string length])]; if (match){ NSLog(@"yes"); }else{ NSLog(@"no"); } 

Esta fue una pregunta más antigua, pero es lo suficientemente general como para nunca pasar de moda.

El 99.9% de las expresiones regulares de dirección de correo electrónico están mal y aún less manejan los dominios internacionales (IDN) correctamente.

Tratar de hacer una regex integral de correo electrónico no es un buen uso del time de desarrollo o de los ciclos de la CPU del usuario.

Esto es mucho más simple:

  1. Coincidir [^@]+@([^@]+)

  2. Extrae el dominio por la parte coincidente.

  3. Falla si coincide con un dominio prohibido. Almacene en caching la list de dominios prohibidos localmente desde un punto final JSON para que no tenga que esperar una nueva aprobación y pueda actualizarlo sobre la marcha. (Asegúrese de registrar statistics web para el análisis de conversiones).

  4. Compruebe que el dominio tenga loggings DNS. Compruebe A y AAAA, además de MX, porque no todos los dominios implementan MX. (Lame pero cierto.)

  5. Solo intente enviar el correo electrónico ya. El usuario intentará nuevamente si percibe que una aplicación tiene valor. :))

Versión Swift 4

Estoy escribiendo esto para aquellos que están haciendo la versión Swift 4 para la expresión regular de correo electrónico. Lo anterior puede hacerse de la siguiente manera:

  do { let emailRegex = try NSRegularExpression(pattern: "^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}$", options: .caseInsensitive) let textRange = NSRange(location: 0, length: email.count) if emailRegex.firstMatch(in: email, options: [], range: textRange) != nil { //Do completion code here } else { //Do invalidation behaviour } } catch { //Do invalidation behaviour } 

Asumiendo que el correo electrónico es una cadena rápida tipeada.