2011-11-19 15 views
9

quiero usar la clase NSRegularExpression para validar si un NSString es una dirección de correo electrónico.NSRegularExpression valida el correo electrónico

Algo como esto 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 puedo validar un NSString si es el aspecto de ésta "[email protected]"

Tal vez alguien me puede ayudar aquí.

Saludos s4lfish

Respuesta

31

que puede utilizar:

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

puede probarlo aquí:

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

Y guardar este enlace que le ayudará con expresiones regulares en el futuro :

http://gskinner.com/RegExr/

EDITAR

Usted puede hacerlo de esta manera:

NSString *string = @"[email protected]"; 
NSString *expression = @"^[A-Z0-9a-z._%+-][email protected][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"); 
    } 
+2

wow que se ve sucio –

+0

Gracias, pero mi problema es que no encuentro una función para demostrar que el correo electrónico introducido se ajusta a la expresión regular. He buscado en la documentación de apple, pero de alguna manera NSRegularExpression no tiene una función que devuelva un valor booleano para mi "if-statement". – s4lfish

+2

Hola, he agregado una muestra de código para eso. Y BTW @ Alex Nichol será genial si pudiera explicar su comentario. Puede que me equivoque en mi respuesta, pero su dosis de comentarios no me ayuda ni a mí ni a nadie más a entender mejor este problema. – shannoga

8

Esta era una pregunta más viejo, pero es lo suficientemente general como para ir nunca fuera de estilo.

99,9% de las expresiones regulares de dirección de correo electrónico son incorrectas y aún menos manejan correctamente los dominios internacionales (IDN).

Intentar realizar una corrección de correo electrónico integral no es una buena utilización del tiempo de desarrollo ni de los ciclos de la CPU del usuario.

Esto es mucho más simple:

  1. Partido [^@][email protected]([^@]+)

  2. Extracto del dominio por parte emparejado.

  3. Falla si corresponde con un dominio bloqueado. Guarde en la memoria caché la lista de dominios prohibidos localmente desde un punto final JSON para que no tenga que esperar la nueva aprobación y pueda actualizarla sobre la marcha. (Asegúrese de registrar estadísticas web para el análisis de conversión.)

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

  5. Intente enviar el correo electrónico ya. El usuario intentará de nuevo si perciben que una aplicación tiene valor. :))

+0

de acuerdo, el dominio de nivel superior puede tener más de 4, como 'community',' properties'. más estricto es peor que nada. – chao787

0

Swift 4 Versión

estoy escribiendo esto para aquellos que están haciendo Swift versión 4 para el correo electrónico de expresiones regulares. Lo anterior se puede hacer de la siguiente manera:

correo electrónico
do { 
     let emailRegex = try NSRegularExpression(pattern: "^[A-Z0-9a-z._%+-][email protected][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 
    } 

Suponiendo es una cadena rápida mecanografiado.

Cuestiones relacionadas