2017-03-08 1 views
0

Je veux valider email id:Regex pour la validation de messagerie dans l'objectif c

[email protected]: - Valable

[email protected]: invalide

Selon ma connaissance, plusieurs points ne sont pas autorisés après "@" dans l'email. S'il vous plaît des conseils comment puis-je détecter le plus de points après @ et vérifier la validation.

J'utilise ci-dessous regex pour la validation d'email. les deux fonctionnent bien. Mais impossible de vérifier plusieurs points après les symboles @.

NSString *emailRegex = 
    @"(?:[a-z0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[a-z0-9!#$%\\&'*+/=?\\^_`{|}" 
    @"~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\" 
    @"x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-" 
    @"z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5" 
    @"]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-" 
    @"9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21" 
    @"-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES[c] %@", emailRegex]; 

    return [emailTest evaluateWithObject:email]; 

J'ai aussi essayé ceci:

NSString *regex1 = @"\\A[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,4}\\z"; 
    NSString *regex2 = @"^(?=.{1,64}@.{4,64}$)(?=.{6,100}$).*"; 
    NSPredicate *test1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex1]; 
    NSPredicate *test2 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex2]; 
    return [test1 evaluateWithObject:email] && [test2 evaluateWithObject:email]; 
+2

Pourquoi les points multiples ne seraient-ils pas autorisés? Il est parfaitement possible que hostname ait plusieurs points. Si vous essayez de les limiter vous aurez beaucoup de gens en colère, comme toutes les entreprises du Royaume-Uni (company.co.uk) ... –

+0

Possible duplicate of [Vérifiez qu'une adresse e-mail est valide sur iOS] (http://stackoverflow.com/questions/3139619/check-that-an-email-address-is-valid-on-ios) –

+0

Cochez [Validations de connexion] (http://www.programmingcrew.in/2015/09/sign -in-validations-in-objective-v.html) – pkc456

Répondre

2

S'il vous plaît essayer cette

+ (BOOL)isValidEmail: (NSString *)email { 
     NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 
     NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 

     return [emailTest evaluateWithObject:email]; 
} 
+0

Il ne fonctionnera pas pour [email protected] –

+0

échoué pour vérifier plusieurs points après @ –

3

Ne pas utiliser regex pour cela, utilisez NSDataDetector:

NSError *error = nil; 
NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:&error]; 
if (!detector) { /* handle error */ } 

Vous pouvez puis utilisez detector même comme vous le feriez d'un NSRegularExpression:

NSString *email = @"[email protected]";   
NSTextCheckingResult *match = [detector firstMatchInString:email options:0 range:NSMakeRange(0, email.length)]; 
NSLog(@"%@", match); 

Il y a beaucoup de pièges cachés à la correspondance des types bien connus comme celui-ci via regex (que vous construisez des hypothèses sur ce qui est valable, que vous avez dans votre question; les sous-domaines et les TLD à plusieurs niveaux sont certainement valables); évitez de le faire vous-même si possible.

0

Pour: [email protected]

NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 

Pour exclure plusieurs points après contrôle @ symboles. [email protected]: - Valable

[email protected]: invalide

exclure du point @[A-Za-z0-9.-]

NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9-]+\\.[A-Za-z]{2,4}"; 
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 
0

L'expression, que vous utilisez, satisfait à la RFC 5322. Les points multiples après @ sont parfaitement valables pour le nom d'hôte. Comment l'autre utilisateur vous dire si vous limiter à un point, vous bloquiez de nombreux domaines.

+ (BOOL) validateEmail: (NSString *) candidate; 
{ 
    // The Official Standard: RFC 5322 
    // http://www.regular-expressions.info/email.html 
    NSString *emailRegEx = 
    @"(?:[a-z0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[a-z0-9!#$%\\&'*+/=?\\^_`{|}" 
    @"~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\" 
    @"x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-" 
    @"z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5" 
    @"]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-" 
    @"9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21" 
    @"-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"; 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx]; 
    return [predicate evaluateWithObject:candidate]; 
}