2010-07-30 77 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