2011-04-05 97 views
0

我寫這個正則表達式來檢查有效電子郵件:/^[-a-z0-9._][email protected][-a-z0-9._]+\.+[a-z]{2,6}$/iPHP自定義的正則表達式

我希望它的電子郵件工作像[email protected]

我怎樣才能解決這個正則表達式?

+0

正則表達式還有其他許多問題。 – 2011-04-05 08:57:02

+1

closevoting as「Too Localized」,除非您指出爲什麼您必須使用您自己的正則表達式而不是使用3700+解決方案之一來驗證http://stackoverflow.com/search?q=validate+email+中給出的電子郵件PHP – Gordon 2011-04-05 08:57:46

回答

2

第一部分

[-a-z0-9._]+ 

目前不接受加號。展開:

[-+a-z0-9._]+ 
3

我有一個簡單的解決方案。

if(filter_var($email,FILTER_VALID_EMAIL)) 
{ 
    //true 
} 

這將是在大多數情況下足夠了,這實際運行C中的定期檢查這反過來會更快,但如果你想有過在你的應用程序中的正則表達式控制然後在下面的正則表達式是什麼用於此檢查:

/^((\\\"[^\\\"\\f\\n\\r\\t\\b]+\\\")|([\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}\\=\\?]+(\\.[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}\\=\\?]+)*))@((\\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\\-])+\\.)+[A-Za-z\\-]+))$/D 

另一個祕訣,我會給你的是,用戶可以輸入電子郵件地址,例如:如果你[email protected]那麼這將繞過檢查有效的電子郵件不要確定dontexists.com運行時間AIL服務器做:

$has_mx_server = (bool)checkdnsrr($domain,"MX"); 

如果域中有一個註冊的MX記錄被僞造電子郵件的機率由好大塊降低。

0

放置+的括號內,並用反斜槓轉義

/^[-a-z0-9._\+][email protected][-a-z0-9._]+\.+[a-z]{2,6}$/i 

「+」是一元漢字意搜索1個或多個出現,因此,尋找實際的字符,就必須逃脫。