PHP RegEx:在电子邮件验证模式中查找漏洞

时间:2013-02-14 03:46:22

标签: php regex email-validation

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

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

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

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

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

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

提前谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

abc@b...com

您可以在http://www.regular-expressions.info/email.html

了解有关电子邮件正则表达式验证的更多信息

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

答案 1 :(得分:1)

电子邮件地址规范非常疯狂。那里有regexen可以对它进行完整的验证,但它们长达数千个字符。最好自己解析它,但PHP有一个内置的电子邮件地址验证器:

filter_var($email, FILTER_VALIDATE_EMAIL);

编辑:

在回答您关于电子邮件地址失败的具体问题时,任何包含引号的电子邮件地址的人都会因为您根本没有说明这些邮件地址:

"explosion-pills"@aysites.com