2013-02-14 51 views
-1

下面的正則表達式模式(PHP)是爲了驗證任何電子郵件地址:PHP正則表達式:查找漏洞在電子郵件驗證模式

^[\w.-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,6}$ 

它說:「比賽至少一個(或多個)的上 - 和/或小寫字母,和/或句點,下劃線和/或破折號後跟一個且只有一個@後跟至少一個(或多個)大寫和/或小寫字母,和/或週期,和/或強調,然後是,並且只有一個週期,然後是兩到六個大寫和/或小寫字母

這似乎與我能想到的任何電子郵件地址匹配。儘管如此,這種讓它正確的感覺可能是欺騙性的。有人需要知識淵博,請指出一種我不知道的明顯或不太明顯的漏洞,這種漏洞會導致它不按照它的意圖執行電子郵件驗證?

(要預見到可能的反應,我知道,filter_var()函數提供了更強大的解決方案,但我在這種情況下,正則表達式特別感興趣)

注:這是關於PHP正則表達式的理論問題,而不是關於驗證電子郵件的實際問題。我只想確定在這種情況下正則表達式的合理可能性的侷限性。

預先感謝您!

+1

例如,電子郵件可能包含加號('+')符號。你已經看過[RFC-complicant regex](http://ex-parrot.com/~pdw/Mail-RFC822-Address.html),不是嗎?另見[這個問題](http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address) – galymzhan 2013-02-14 03:55:25

+0

我做到了。我在問這個問題,因爲我想看到一個實際的電子郵件地址的例子,這種模式不會匹配。 – 2013-02-14 04:01:28

回答

1

使用正則表達式驗證電子郵件是棘手

試試下面的電子郵件作爲輸入到你的正則表達式,即:^[\w.-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,6}$

[email protected]

您可以在http://www.regular-expressions.info/email.html

閱讀更多關於電子郵件的正則表達式驗證

如果您正在爲應用程序執行此操作,請通過向所提供的地址發送電子郵件來使用電子郵件驗證,而不是使用非常複雜的正則表達式。

+0

感謝,這就是我一直在尋找。 – 2013-02-14 04:02:11

1

電子郵件地址規範是非常堅果。那裏有regexen,可以做一個完整的驗證,但他們是數千個字符長。這可能是更好的解析它在你自己的,但PHP有一個內置的驗證電子郵件地址:

filter_var($email, FILTER_VALIDATE_EMAIL); 

編輯:

在回答你將失敗的電子郵件地址的具體問題,任何引號中的電子郵件名稱將因爲您根本沒有對它們進行說明:

"explosion-pills"@aysites.com 
+0

謝謝。我知道filter_val()選項。但那不是我所問的。 – 2013-02-14 04:02:56

+1

@DimitriVorontzov請參閱編輯 – 2013-02-14 04:03:27

+0

謝謝,@Explosion Pills! – 2013-02-14 04:06:17

相關問題