PHP 的 filter_var FILTER_VALIDATE_EMAIL 真的有效吗?
在阅读了各种帖子后,我决定不使用 REGEX 来检查电子邮件是否有效,而是简单地使用 PHP 内置的 filter_var 函数。它似乎工作正常,直到它开始告诉我一封电子邮件无效,因为我里面有一个号码。
即 [email protected] 有效,而 [电子邮件受保护] 没有。
我是否遗漏了某些内容,或者 filter_var($email, FILTER_VALIDATE_EMAIL)
真的非常无效?
After reading various posts I decided not to use REGEX to check if an email is valid and simply use PHP's inbuilt filter_var function. It seemed to work ok, until it started telling me an email was invalid because I had a number in it.
ie [email protected] works, while [email protected] doesn't.
Am I missing something or is the filter_var($email, FILTER_VALIDATE_EMAIL)
really quite ineffective?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
PHP 5.3.3 过滤器代码中使用的正则表达式基于 Michael Rushton 的博客,内容为 电子邮件地址验证。它似乎确实适用于您提到的情况。
您还可以查看比较电子邮件地址验证正则表达式<中的一些选项/a> (当前 PHP 中使用的正则表达式是经过测试的其中之一)。
然后您可以选择您更喜欢的正则表达式,并将其用于调用
preg_match()
。或者,您可以采用正则表达式并替换文件 PHP/ext/filter/tical_filter.c 中的正则表达式,函数
php_filter_validate_email()
,然后重建 PHP。The regular expression used in the PHP 5.3.3 filter code is based on Michael Rushton's blog about Email Address Validation. It does seem to work for the case you mention.
You could also check out some of the options in Comparing E-mail Address Validating Regular Expressions (the regexp currently used in PHP is one of those tested).
Then you could choose a regexp you like better, and use it in a call to
preg_match()
.Or else you could take the regexp and replace the one in file PHP/ext/filter/logical_filter.c, function
php_filter_validate_email()
, and rebuild PHP.[email protected] 似乎工作正常:
http://codepad.org/5HDgMW5i
但我确实看到人们抱怨它有问题,即使是在 SO 上。它很可能确实存在问题,但正则表达式解决方案也会存在问题。电子邮件地址规范非常非常复杂(RFC XXXX)。
这就是为什么您应该依赖的验证电子邮件的唯一解决方案是向该地址发送电子邮件并要求采取行动(例如:如果是注册脚本,请他们单击验证链接)。
[email protected] seems to work fine:
http://codepad.org/5HDgMW5i
But I've definitely seen people complaining it's got problems, even on SO. In all likelihood, it does have problems, but so will a regex solution. The email address specifications are very, very complicated (RFC XXXX).
That's why the only solution to verify emails you should rely on is sending an email to the address and demand action (eg: if it's a registration script ask them to click on a verification link).
该过滤器最近已进行了改造。
http://codepad.org/Lz5m2S2N - 看来在键盘使用的版本中您的大小写已正确过滤
您可以另请参阅 http://bugs.php.net/49576 和 http://svn.php.net/viewvc/php/php-src /trunk/ext/filter/tical_filters.c 。正则表达式非常可怕。
that filter has been revamped recently.
http://codepad.org/Lz5m2S2N - appears that in version used by codepad your case is filtered correctly
You can also look at http://bugs.php.net/49576 and http://svn.php.net/viewvc/php/php-src/trunk/ext/filter/logical_filters.c . Regexp is quite scary.