2010-07-30 41 views
5

,哪种方案更好地使用内置的验证filter_var('email', FILTER_VALIDATE_EMAIL)或自定义功能的电子邮件验证?filter_var或自定义函数在PHP

谢谢!

+1

这取决于您的自定义功能;) – 2010-07-30 09:28:54

+0

我用这一个:http://code.iamcal.com/php/rfc822/rfc822.phps的时刻。 – Alex 2010-07-30 09:54:54

回答

3

自定义验证让你在你想要走多远,这个更多的控制。作为一个电子邮件地址,什么是和不是有效的,比你想象的要复杂得多,而且大多数情况下,最好过于宽松,而不是太严格。毕竟,一个语法上有效的电子邮件地址并不能保证该帐户实际存在,更不用说它正在被积极使用。类似的,它必须包含一个@,@之后至少一个点,@之前至少一个字符,以及任何非法字符都可能在大多数情况下足够好。

+0

PHP不按官方的RFC无法验证电子邮件地址(我现在找不到这个权利作为参考,但它最近来到了这里)。即使“FILTER_VALIDATE_EMAIL”在大多数情况下可能都足够好,但我建议您不要这样做,并且可以使用符合RFC的检查程序,或者如您所说,轻松一点。 – deceze 2010-07-30 09:41:41

+1

哦,在这里我们去:http://svn.php.net/repository/php/php-src/branches/PHP_5_3/ext/filter/logical_filters.c寻找在'php_filter_validate_email'正则表达式。它太短而无法完全符合RFC。 :) – deceze 2010-07-30 09:47:42

+0

我的观点正好。符合RFC并不意味着它的存在和工作。另外,如果听说所有的邮件代理都符合RFC,我会感到惊讶。 – tdammers 2010-07-30 10:01:23

2

过滤器变种的电子邮件删除所有字符,除了字母数字!#$%&'*+-/=?^_`{|}[email protected][]。现在取决于您是否想要使用此过滤或创建定制解决方案。

这里是对一个优秀的文章:

Input Validation: Using filter_var() Over Regular Expressions

+0

* santizing *过滤器,但不是* validating *过滤器。如果没有进行消毒处理,“有效”电子邮件(根据过滤器)仍然可以包含上述以外的其他字符。 – salathe 2010-07-30 11:09:45

1

欢迎您使用我的免费PHP函数is_email()验证地址。它可用here

这将确保一个地址是完全RFC 5321标准。它可以选择性地检查域是否确实存在。

你不应该依赖验证告诉你用户的电子邮件地址是否真实存在:一些ISP给了不符合规定的地址给他们的用户,尤其是在不使用拉丁字母的国家。更多在我的文章关于电子邮件验证在这里:http://isemail.info/about