php 中用于电子邮件验证的 filter_var 或自定义函数
Posted
技术标签:
【中文标题】php 中用于电子邮件验证的 filter_var 或自定义函数【英文标题】:filter_var or custom function for email validation in php 【发布时间】:2011-03-23 03:53:17 【问题描述】:哪个解决方案更好,使用内置验证filter_var('email', FILTER_VALIDATE_EMAIL)
还是自定义函数?
谢谢!
【问题讨论】:
这取决于你的自定义函数;) 我正在使用这个:code.iamcal.com/php/rfc822/rfc822.phps。 【参考方案1】:Filter var for email 删除所有字符,letters、digits 和 !#$%&'*+-/=?^_`|~@.[]
除外。现在取决于您是要使用此过滤还是创建自定义解决方案。
这里有一篇很棒的文章:
Input Validation: Using filter_var() Over Regular Expressions
【讨论】:
santizing 过滤器有作用,但 validating 过滤器没有。未经清理,“有效”电子邮件(根据过滤器)仍然可以包含上面列出的字符以外的字符。【参考方案2】:自定义验证让您可以更好地控制自己想要走多远。作为电子邮件地址,什么是有效的和无效的比您想象的要复杂得多,而且在大多数情况下,对此过于松懈总比过于严格要好。毕竟,语法上有效的电子邮件地址并不能保证该帐户确实存在,更不用说它正在被积极使用。类似的,它必须包含一个@,在@ 之后至少一个点,在@ 之前至少一个字符,并且没有非法字符,在大多数情况下可能就足够了。
【讨论】:
PHP 不根据官方 RFC 验证电子邮件地址(我现在找不到这方面的参考资料,但它最近出现在这里)。尽管FILTER_VALIDATE_EMAIL
在大多数情况下可能已经足够好,但我还是建议不要使用它,要么使用符合 RFC 的检查器,要么如您所说,放轻松。
哦,我们开始:svn.php.net/repository/php/php-src/branches/PHP_5_3/ext/filter/… 在php_filter_validate_email
中查找正则表达式。完全符合 RFC 的时间太短了。 :)
我的观点完全正确。符合 RFC 并不意味着它存在并且有效。此外,如果听到所有邮件代理都符合 RFC,我会感到惊讶。【参考方案3】:
PHP 的 filter_var 可能对大多数应用程序都满意,但如果您想比较性能和有效性,请查看此站点 http://www.linuxjournal.com/article/9585 以了解 RFC 2822 合规性的含义。
【讨论】:
【参考方案4】:我在谷歌搜索时发现了这个, 希望这能更好地解释你
http://www.addedbytes.com/code/email-address-validation/
【讨论】:
【参考方案5】:欢迎您使用我的免费 PHP 函数 is_email()
来验证地址。它可用here。
它将确保地址完全符合 RFC 5321。它还可以选择检查域是否实际存在。
您不应依赖验证器来告诉您用户的电子邮件地址是否真实存在:一些 ISP 会向其用户提供不合规的地址,尤其是在不使用拉丁字母的国家/地区。更多关于电子邮件验证的文章在这里:http://isemail.info/about。
【讨论】:
以上是关于php 中用于电子邮件验证的 filter_var 或自定义函数的主要内容,如果未能解决你的问题,请参考以下文章
为啥 PHP filter_var 说这是一个有效的电子邮件地址?