2012-07-30 75 views
1

我試過下面的代碼,但它給了我不匹配。檢查正則表達式或其他方式的電子郵件字符串

re:run("[email protected]", "\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b"). 

正則表達式我來到這裏http://www.regular-expressions.info/email.html

編輯: 下不工作,以

re:run("345345", "\b[0-9]+\b"). 

如果你們有連接字符串的電子郵件時一個將匹配

re:run("[email protected]", "^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$"). 

回答

0

看起來你需要不區分大小寫匹配?

目前[A-Z0-9._%+-](例如)僅匹配大寫字符(加數字等)。

一種解決方案是指定[A-Za-z]。另一種解決方案是在匹配之前將您的電子郵件地址轉換爲大寫字母。

+0

'' 重新:運行( 「[email protected]」,「\ B [A-ZA-Z0-9 ._%+ - ] + @ [A-ZA-Z0-9 .-] + \。 [A-Za-z] {2,4} \ b「)。'' - 給我不匹配(( – Yola 2012-07-30 10:06:05

5

我毫不猶豫地回答這個問題,因爲我相信它依賴於一個不正確的假設 - 你能確定的電子郵件地址是否有效或不使用正則表達式。有關更多詳情,請參閱this question;從短暫的一瞥我會注意到,在你的問題的正則表達式不接受.museum.рф頂級域名。

這就是說,你需要避開反斜槓。你希望字符串包含反斜槓,但是在Erlang中,反斜線用於字符串內部以便轉義各種字符,所以任何文字反斜槓都需要寫爲\\。試試這個:

3> re:run("[email protected]", "\\b[a-z0-9._%+-][email protected][a-z0-9.-]+\\.[a-z]{2,4}\\b"). 
{match,[{0,9}]} 

甚至更​​好,這一點:

8> re:run("[email protected]", "\\b[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-][email protected][a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*\\b"). 
{match,[{0,9}]} 

這是正則表達式used in the HTML 5 standard,修改爲使用\\b而不是^$

+2

+1),但你仍應該擴展這個以允許例如'='在localpart中,並且注意任何使用正則表達式在失敗的情況下會失敗,在域名部分添加'-'至少可以允許國際化域名的punycode表示(當然,你應該完全放棄長度限制)。此外,你應該允許任意深度的子域名 - - 許多ccTLD甚至不允許只有兩個部分的域名 – tripleee 2012-07-30 16:11:55

+0

好點,我從一個有信譽的來源添加了一個正則表達式。 – legoscia 2012-07-30 17:45:32

相關問題