2009-12-09 125 views
8

我知道這裏有很多關於電子郵件驗證和特定RegEx的問題。我想知道哪些最佳做法是用於驗證有關[email protected]技巧的電子郵件(details here)。我對JavaScript驗證當前的正則表達式如下所示,但它不支持額外的+手柄:電子郵件地址驗證的最佳做法(包括Gmail中的+地址)

/^([a-zA-Z0-9_.-])[email protected](([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/ 

是否有支持額外+任何其他服務?我應該允許在地址中使用+,還是應該將RegEx更改爲僅允許將gmail.comgooglemail.com作爲域的電子郵件地址?如果是這樣,RegEx會改變什麼?

更新: 感謝大家指出+是根據規範有效。我不知道這一點,現在做未來。對於那些說甚至使用RegEx來驗證它的人來說,我的理由完全基於我正在創建的創意設計。我們客戶的設計在模糊的電子郵件地址輸入旁邊放置了綠色的支票或紅色的X.該圖標表示它是否是有效的電子郵件地址,因此我必須使用一些JS來驗證它。

+2

這是很難一招時,它的電子郵件標準的一部分,一個非常不錯的文章。 – tloach 2009-12-09 14:06:12

+8

請勿使用RegEx進行電子郵件驗證,除了捕獲明顯的錯誤類型。只需向用戶發送帶有「激活」鏈接的電子郵件。沒有用於電子郵件驗證的foolproog正則表達式。至少沒有一張適合A4紙,即使以小而易讀的字體打印;-)(http://www.regular-expressions.info/email.html) – Duroth 2009-12-09 14:07:57

+0

@tloach我認爲這是一個騙局如果不是所有的電子郵件服務都支持這種方式,那麼無論'+'後面的部分如何,都會將電子郵件發送到句柄的第一部分 - 我甚至不知道它是標準的一部分。 – 2009-12-09 14:11:52

回答

11

+是電子郵件地址中的valid character。不要緊,如果該域不是gmail.com或googlemail.com

正則表達式實際上不是一個非常好的驗證電子郵件的方式,但如果您只是想修改您的正則表達式來處理加號,請更改它爲以下內容:

/^([a-zA-Z0-9_.-\+])[email protected](([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/ 

作爲如何這個表達式不驗證對規範的例子:電子郵件[email protected]根據它是有效的。

+0

我會好奇什麼是最好的處理電子郵件地址驗證。 – Zoidberg 2009-12-09 14:05:26

+0

我想他的意思是使用經過驗證的測試庫比使用自己的正則表達式更好。這種庫的一個Java例子是Apache Commons。 – 2009-12-09 14:07:42

+1

請參閱http://stackoverflow.com/questions/3232/how-far-should-one-take-e-mail-address-validation – 2009-12-09 14:08:58

5

如果需要通過正則表達式驗證電子郵件,則需要read the standard或至少this article

標準建議使用這個正則表達式:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]) 

如果不嚇唬你,它應該:)

+1

從您鏈接到的文章:「不要盲目複製在線圖書館或討論論壇的正則表達式。」此外,這個正則表達式_still_沒有完全驗證規範。 – 2009-12-09 14:10:21

+0

@Aaron謝謝,這非常可怕。我會假裝以前從未見過 - 特別是編碼字符! – 2009-12-09 14:21:45

3

我傾向於去與沿東西線/[email protected] 。+ \ .. + /檢查簡單的錯誤。然後,我會發送一封電子郵件到地址,以確認它確實存在,因爲大多數拼寫錯誤仍然會導致語法上有效的電子郵件地址。

2

該規範允許一些非常瘋狂的醜陋電子郵件地址。我經常非常惱火的網站,甚至抱怨完全正常,有效的電子郵件地址,所以請儘量不要拒絕有效的電子郵件地址。接受一些非法地址比拒絕合法地址更好。

像其他人一樣,我會用一個簡單的正則表達式像/[email protected]+/然後發送驗證郵件。如果驗證足夠重要,驗證是非常重要的,因爲合法的電子郵件地址仍然可以屬於除訪問者以外的其他人。或者包含一個意想不到的但致命的錯字。

*編輯:從正則表達式的域部分刪除點,因爲[email protected]仍然是一個有效的電子郵件地址。所以即使我的超級簡化驗證拒絕了有效地址。是否有任何缺點只是接受所有包含@的東西在前面和後面?

+2

湯加政府沒有理由不能爲'ccTLD'添加一個'MX'條目,使得諸如'mcv @'之類的地址成爲實際的工作電子郵件地址。他們已經在'http:// to'上運行了一個web服務器(對於一個URI shortener服務),所以這當然不是不現實的。 – 2009-12-09 15:48:56