PHP的filter_var FILTER_VALIDATE_EMAIL实际上有效吗?

wil*_*fun 32 php email-validation

在阅读各种帖子后,我决定不使用REGEX检查电子邮件是否有效,只需使用PHP内置的filter_var函数.它似乎工作正常,直到它开始告诉我一封电子邮件无效,因为我有一个号码.

ie name@domain.com工作,而name2@domain.com没有.

我错过了什么或filter_var($email, FILTER_VALIDATE_EMAIL)真的非常无效?

Bil*_*win 34

PHP 5.3.3过滤器代码中使用的正则表达式基于Michael Rushton关于电子邮件地址验证的博客.它似乎适用于你提到的情况.

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

然后你可以选择你更喜欢的正则表达式,并在调用时使用它preg_match().

或者你可以使用regexp并替换文件PHP/ext/filter/logical_filter.c中的那个,函数php_filter_validate_email()和重建PHP.

  • 关于它:) (2认同)

Nul*_*ion 5

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

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

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

  • @Keen我不是说抛出正则表达式验证窗外; 你可以验证它,如果它失败警告用户(例如:"计算机说你的电子邮件无效,但它不是很聪明.你确定要使用这封电子邮件吗?") (3认同)