电子邮件地址的正则表达式不起作用

Yoo*_*oot 2 regex email iphone objective-c nspredicate

我正在尝试使用以下代码检查某些电子邮件地址是否正确:

NSPredicate *regexMail = [NSPredicate predicateWithFormat:@"SELF MATCHES '.*@.*\..*'"];
if([regexMail evaluateWithObject:someMail])
... 
Run Code Online (Sandbox Code Playgroud)

但是"\".由于邮件"smith @ company"被接受,似乎没有用.此外,我有以下警告:"未知逃脱序列"

编辑:

我正在使用Objective-C for iPhone进行编程.

谢谢

0xc*_*ced 13

这是iOS Mail应用程序用于验证电子邮件地址的正则表达式:

^[[:alnum:]!#$%&’*+/=?^_`{|}~-]+((\.?)[[:alnum:]!#$%&’*+/=?^_`{|}~-]+)*@[[:alnum:]-]+(\.[[:alnum:]-]+)*(\.[[:alpha:]]+)+$
Run Code Online (Sandbox Code Playgroud)

这是一个复制/粘贴就绪函数,使用此正则表达式验证Objective-C中的电子邮件地址:

BOOL IsValidEmail(NSString *email)
{
    // Regexp from -[NSString(NSEmailAddressString) mf_isLegalEmailAddress] in /System/Library/PrivateFrameworks/MIME.framework
    NSString *emailRegex = @"^[[:alnum:]!#$%&'*+/=?^_`{|}~-]+((\\.?)[[:alnum:]!#$%&'*+/=?^_`{|}~-]+)*@[[:alnum:]-]+(\\.[[:alnum:]-]+)*(\\.[[:alpha:]]+)+$";
    NSPredicate *emailPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
    return [emailPredicate evaluateWithObject:email];
}
Run Code Online (Sandbox Code Playgroud)


Cra*_*der 6

您无法仅使用正则表达式正确验证电子邮件地址.一个简单的搜索将向您展示许多讨论此事的文章.问题在于DNS的性质:有太多可能的域名(包括非英语和Unicode域名),您无法使用正则表达式正确验证它们.别试试.

确定电子邮件地址是否有效的唯一正确方法是使用唯一URL向该地址发送消息,该URL标识与电子邮件关联的帐户,供用户单击.其他任何东西都会惹恼你的最终用户.