正则表达式的电子邮件地址

Log*_* S. 23 regex objective-c email-validation

有人可以给我看一个示例RegEx的电子邮件地址以及如何在Objective-C中使用吗?

寻找合适的东西: name@place.something

Rya*_*ugh 44

如上所述:http://github.com/benofsky/DHValidation

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

    return [emailTest evaluateWithObject:candidate];
}
Run Code Online (Sandbox Code Playgroud)

或者将http://regexkit.sourceforge.net/RegexKitLite/添加到您的项目中,并像上面那样自己执行正则表达式.

另外,要回答检查电子邮件地址是否真实的问题,而不仅仅是使用正则表达式,您可以使用以下服务:http://verify-email.org/register/levels.html

请注意,此答案未考虑较新的TLD,例如.online; 包括那些更新最终{2,4}为{2,63}

  • @holex我确实理解正则表达式.看来*您*不了解有效SMTP电子邮件地址的完整语法.我不打算提供完整的答案,因为这很难做到. (5认同)
  • @holex转到并查看RFC并自行了解有效电子邮件地址的语法.本地名称部分允许加号.我给出的示例电子邮件地址没有任何问题.这是合法的,但你的正则表达不是.请尝试此链接以获取摘要http://en.wikipedia.org/wiki/Email_address (5认同)
  • 我讨厌跳到这里,但@JeremyP是对的:用正则表达式验证一个电子邮件地址是非常困难和纯粹的愚蠢.并且没有意义,因为即使是语法合法的电子邮件地址也可能不指向实际的邮箱.此页面提供了有关使用正则表达式的更多信息; 向下滚动到名为"官方标准"的部分,看看*真正的*正则表达式是什么:http://www.regular-expressions.info/email.html (4认同)
  • Apple的`NSRegularExpression`类也是如此,不需要第三部分代码. (3认同)
  • @holex我所做的就是解释你的评论不正确.这不会让我成为一个巨魔.我解释了为什么你的评论不正确,这很有用,因为它允许你或提问者解决问题.我没有指责人们不知道正则表达,我没有指责任何人成为巨魔.在答案中解释技术错误或沉迷于名字呼叫是否更具建设性? (3认同)
  • @holex告诉人们他们的评论(你没有给它答案,为什么不?)是错误的不是拖钓.至于我是否应该加入这个论坛:好吧,我会让我的代表对此发表意见. (2认同)
  • @holex我告诉你一件事要纠正你的评论.我还强烈暗示,你所做的一切都不会完全修补它,这意味着正则表达式解决方案几乎不可能正常工作.然后我明确地说明了这一点,以回应您之前的挑战之一.我重申:我所做的就是告诉你答案错在哪里.从那以后,我一直受到你的虐待.如果你对这里批评你的评论的每个人这样做,你最终会感到精疲力竭.接受批评,学习和继续前进会更好. (2认同)
  • @RyanMcDonough没有自动方法来确定是否存在电子邮件地址.如果您向不存在的地址发送电子邮件,则应该退回,但不能保证. (2认同)

Avi*_*hen 6

NSString *string= @"my@mail.com her@mail.com him@mail.com";
NSError *error = NULL;
NSRegularExpression *regex = nil;
regex = [NSRegularExpression regularExpressionWithPattern:@"\\w+@[a-zA-Z_]+?\\.[a-zA-Z]{2,6}"
                                                  options:NSRegularExpressionCaseInsensitive
                                                    error:&error];   
NSUInteger numberOfMatches = 0;
numberOfMatches = [regex numberOfMatchesInString:string
                                         options:0
                                           range:NSMakeRange(0, [string length])];
NSLog(@"numberOfMatches is: %lu", numberOfMatches);
Run Code Online (Sandbox Code Playgroud)

当然还有更多选择.阅读这里.


sco*_*ope 5

由于我找不到Objective-C的任何严肃的电子邮件正则表达式示例,我在这里放这个:

const char cRegex[] = "^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$";
NSString *emailRegex = [NSString stringWithUTF8String:cRegex];
NSPredicate *emailPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES[c] %@", emailRegex];
BOOL isValid = [emailPredicate evaluateWithObject:email];
Run Code Online (Sandbox Code Playgroud)

这是基于Michael Rushton的正则表达式,它由PHP的filter_var()函数使用,根据这种比较它似乎足够好.

请享用!

编辑

斯威夫特4

func isValidEmail(email: String) -> Bool {
    let emailRegex = "^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$"
    return NSPredicate(format: "SELF MATCHES[c] %@", emailRegex).evaluate(with: email)
}
Run Code Online (Sandbox Code Playgroud)