【问题标题】:Mail validation with PHP filter_var() or with regular expression使用 PHP filter_var() 或正则表达式进行邮件验证
【发布时间】:2011-05-02 21:09:16
【问题描述】:

我今天了解到,可以通过两种方式验证电子邮件。一种方法是通过正则表达式,另一种是通过filter_var() 函数。

如果有人能告诉我filter_var 的验证有多强,如果有任何关于从正则表达式切换到它的想法的建议或建议,那就太好了。

【问题讨论】:

  • 电子邮件地址过滤器 (FILTER_VALIDATE_EMAIL) 并不神奇。它只是使用正则表达式(source) 来完成大部分工作——这是否最适合您的需求,我无法回答。了解该工具正在做什么(正则表达式会接受/拒绝什么?)并且不使用单个工具可能是您最安全的一步。

标签: php regex filter email-validation


【解决方案1】:

如果您使用filter_var,它将验证像a@b-.c 这样的东西,严格来说是有效的,但您可能不想在您的应用程序中允许这样的地址。

如果您使用正则表达式,您可以更好地控制允许和禁止的内容。

不过,验证电子邮件地址的最可靠方法是尝试向其发送电子邮件并要求收件人单击链接进行确认。这还有另一个好处——有人可能会在输入他们的电子邮件地址时打错字,结果仍然是有效的电子邮件地址,但不是正确的 em> 地址。

【讨论】:

    【解决方案2】:

    正如 Mark Byers 所说,filter_var 确实验证了任何严格来说有效的东西,我认为这是一件好事。例如,使用 Gmail:
    您的电子邮件地址是 something@gmail.com。您想在网站 x.com 上注册。您并不完全信任该网站,并使用电子邮件地址 something+x@gmail.com 进行注册。 Gmail 会自动将其重定向到您自己的收件箱。因此,如果这个不受信任的网站将您的电子邮件地址出售给某人,并且您收到一封地址为 something+x@gmail.com 的电子邮件,您就知道是谁泄露了您的电子邮件地址!

    当您编写自己的正则表达式时,您可能不会考虑这样的事情,并且对于使用这种语法的人(比如我!)来说,这可能会变得非常烦人。我总是使用 filter_validate()。这样,我知道有效的电子邮件地址将始终得到验证。

    无论如何,老实说:无论您使用自己的 regexp 还是 filter_validate,我仍然可以编写一个将被验证的假电子邮件地址。您也可以接受任何内容并发送“激活您的帐户”电子邮件,以确保用户可以接收和阅读来自您网站的电子邮件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-23
      • 2014-05-24
      • 2020-07-22
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      • 2020-02-18
      相关资源
      最近更新 更多