【问题标题】:PHP RegEx: Find Vulnerability Within Email Validation PatternPHP RegEx:在电子邮件验证模式中查找漏洞
【发布时间】:2013-01-29 19:42:10
【问题描述】:

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

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

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

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

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

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

提前谢谢你!

【问题讨论】:

  • 例如,电子邮件可能包含加号 (+)。你已经看过RFC-complicant regex,不是吗?另见this question
  • 我做到了。我问这个问题是因为我想看一个与此模式不匹配的实际电子邮件地址的示例。

标签: php regex email-validation


【解决方案1】:

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

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

abc@b...com

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

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

【讨论】:

  • 谢谢,这就是我要找的。​​span>
【解决方案2】:

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

filter_var($email, FILTER_VALIDATE_EMAIL);

编辑:

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

"explosion-pills"@aysites.com

【讨论】:

  • 谢谢。我知道 filter_val() 选项。但这不是我要问的。
  • 谢谢你,@Explosion Pills!
  • @DimitriVorontzov 如果它只有一个句点,如 "...或小写字母,和/或句点,和/或下划线后跟一个且只有一个句点后跟 2 到 6 个大写- 和/或小写字母。”那么我@ofsol.gov.uk 会失败吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 2019-03-12
  • 1970-01-01
  • 2011-09-25
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多