NSRegularExpression验证电子邮件

s4l*_*ish 9 regex cocoa ios

我想使用NSRegularExpression类来验证是否NSString是电子邮件地址.

像这样的伪代码:

- (BOOL)validateMail : (NSString *)email
{
    NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:@"" options:NSRegularExpressionCaseInsensitive error:NULL];

    if(emailValidated)
    {
        return YES;
    }else{
        return NO;
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不知道我是如何验证NSString的,如果它看起来像这个"email@stackoverflow.com"

也许有人可以帮助我.

问候s4lfish

sha*_*oga 31

您可以使用:

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

你可以在这里测试一下:

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

并保存此链接,它将在未来帮助您使用Regex:

http://gskinner.com/RegExr/

编辑

你可以这样做:

 NSString *string = @"shlaflaf@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");
    }
Run Code Online (Sandbox Code Playgroud)

  • 嗨,我已经添加了一个代码示例.如果你能解释一下你的评论,那么BTW @Alex Nichol会很棒.我的回答可能有问题,但你的评论对我没有帮助,或者其他人更好地理解这个问题. (2认同)
  • 该表达式不符合RFC 822. (2认同)

小智 8

这是一个较老的问题,但它足够通用,永远不会过时.

99.9%的电子邮件地址正则表达式是错误的,甚至更少处理国际域(IDN)正确.

尝试制作全面的电子邮件正则表达式并不能很好地利用开发时间或用户CPU周期.

这更简单:

  1. 比赛 [^@]+@([^@]+)

  2. 根据匹配的部分提取域.

  3. 如果它与禁止的域匹配则失败.从JSON端点本地缓存禁止域列表,这样您就不必等待重新批准,并且可以即时更新它.(请务必记录网络统计信息以进行转换分析.)

  4. 检查域是否有DNS记录.检查A和AAAA,以及MX,因为并非所有域都实现MX.(Lame但是真的.)

  5. 只是尝试发送电子邮件.如果用户认为某个应用具有价值,则会再次尝试.:))