-1

以下正则表达式模式(用于 PHP)旨在验证任何电子邮件地址:

^[\w.-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$

它说:“匹配至少一个(或多个)大写和/或小写字母,和/或句点,下划线和/或破折号,后跟一个且仅一个@,后跟至少一个(或多个)大写和/或小写字母,和/或句点,和/或下划线后跟一个且只有一个句点,后跟两到六个大写和/或小写字母

这似乎与我能想到的任何电子邮件地址相匹配。尽管如此,这种正确的感觉可能具有欺骗性。有知识的人能否指出我不知道的这种模式中的一个明显或不那么明显的漏洞,这会使其无法按照预期的方式执行电子邮件验证?

(为了预见可能的响应,我知道 filter_var() 函数提供了更强大的解决方案,但在这种情况下我对正则表达式特别感兴趣。)

注意:这是一个关于正则表达式的 PHP 风格的理论问题,而不是关于验证电子邮件的实际问题。在这种情况下,我只想确定正则表达式合理可行的限制。

先感谢您!

4

2 回答 2

1

使用正则表达式验证电子邮件很棘手

尝试以下电子邮件作为您的正则表达式的输入,即:^[\w.-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$

abc@b...com

您可以在http://www.regular-expressions.info/email.html阅读有关电子邮件正则表达式验证的更多信息

如果您正在为应用程序执行此操作,请通过向提供的地址发送电子邮件来使用电子邮件验证,而不是使用非常复杂的正则表达式。

于 2013-02-14T03:55:36.713 回答
1

电子邮件地址规范非常疯狂。那里有可以对其进行全面验证的正则表达式,但它们有数千个字符长。自己解析可能会更好,但是 PHP 有一个内置的电子邮件地址验证器:

filter_var($email, FILTER_VALIDATE_EMAIL);

编辑:

在回答您的电子邮件地址将失败的具体问题时,任何在引号中包含电子邮件名称的人都将因为您根本不考虑它们:

"explosion-pills"@aysites.com
于 2013-02-14T03:55:37.917 回答