PHP的filter_var FILTER_VALIDATE_EMAIL真的有效吗?

2022-08-30 14:17:38

在阅读了各种帖子后,我决定不使用REGEX来检查电子邮件是否有效,而只需使用PHP内置的filter_var功能即可。它似乎工作正常,直到它开始告诉我一封电子邮件是无效的,因为我里面有一个数字。

即 name@domain.com 有效,而 name2@domain.com 则不起作用。

是我错过了什么,还是真的很无效?filter_var($email, FILTER_VALIDATE_EMAIL)


答案 1

PHP 5.3.3 过滤器代码中使用的正则表达式基于 Michael Rushton 关于电子邮件地址验证的博客。它似乎确实适用于您提到的案例。

您还可以查看比较电子邮件地址验证正则表达式中的一些选项(PHP 中当前使用的正则表达式是测试的正则表达式之一)。

然后,您可以选择一个您更喜欢的正则表达式,并在调用 中使用它。preg_match()

否则,您可以采用正则表达式并替换文件PHP/ext/filter/logical_filter.c,函数,然后重新构建PHP。php_filter_validate_email()


答案 2

name2@domain.com 似乎工作正常:http://codepad.org/5HDgMW5i

但我肯定看到有人抱怨它有问题,即使在SO上也是如此。很可能,它确实有问题,但正则表达式解决方案也会有问题。电子邮件地址规范非常非常复杂(RFC XXXX)。

这就是为什么验证您应该依赖的电子邮件的唯一解决方案是向地址发送电子邮件并采取要求操作(例如:如果是注册脚本,请他们单击验证链接)。


推荐