2012-09-16 87 views
0

有人可以請解釋這個java正則表達式給我?正則表達式的電子郵件地址驗證

^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|in|aero|jobs|museum)$ 

這正則表達式是用於驗證電子郵件地址

+2

這是您不明白的基因表達或它的一部分嗎?如果我可能會問,爲什麼你需要了解正則表達式? – Nicholas

+2

你是什麼意思「解釋」它?你不瞭解什麼部分? –

+3

不要使用複製粘貼的正則表達式,你不完全理解匹配的東西...你最好使用一些庫來做驗證 - 例如Apache Commons - 檢查出http://commons.apache .org/validator/apidocs/org/apache/commons/validator/routines/EmailValidator.html因此您不必理解複雜的正則表達式... – hovanessyan

回答

12

驗證電子郵件地址現在被認爲是不好的做法(stop validating email addresses with regex),特別是在您的問題中使用這種表達方式。例如,這是一個more complete expression

至於這種表達,讓我們打破它在部分:

開頭匹配字符串從

^ 

匹配至少一個字符列表

[a-z0-9!#$%&'*+/=?^_`{|}~-]+ 

非捕獲的(see backreference )組可以重複0..n次,匹配.,然後至少有一個字符從列表中。

(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)* 

只是這種性格

@ 

非捕獲在這個名單[a-z0-9],然後可能更多字符從下面的列表中匹配一個字符組。匹配的字符串必須以[a-z0-9]開始和結束,並且其內部可以有[a-z0-9-]。

(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+ 

非捕獲組匹配2個大寫字母或其中一個單詞。

(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|in|aero|jobs|museum) 

字符串結尾。

$ 
+2

+1使用驗證電子郵件,而不是... – hovanessyan

+0

只是解釋。謝謝你的伴侶。 –

3
^          # Beginning of the line 
[a-z0-9!#$%&'*+/=?^_`{|}~-]+   # One or more (+) characters from the 
             bracket expression, i.e., letters [a-z], 
             numbers [0-9], !, $, %, et cetera 
(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)* # Zero or more (*) of the above 
             expression, preceded by a dot \\. 
@          # Literal @ 
(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+ # A digit or a letter, followed by 
             optional digits, letters, or dashes, 
             followed by a a dot 
(?:[A-Z]{2}|com|org|net...)    # Country code ([A-Z]{2}), or a top level 
             domain, such as com, org, net. 
$          # End of the line 

使用一個具體的例子,[email protected]。電子郵件的第一部分john將與^[a-z0-9!#$%&'*+/=?^_{|}~-]+匹配。 @將與@匹配。域foo,以及點,匹配(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+。最後,TLD com通過交替(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|in|aero|jobs|museum)進行匹配。

相關問題