2014-02-12 141 views
0

之前的一個或多個字符我有以下電子郵件REGEX驗證。正則表達式接受@

([a-zA-Z0-9_\-\.]+)([a-zA-Z0-9])@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3}) 

當我測試它不允許@前.e.g [email protected]是單字節字符的電子郵件,但它允許2個字符@前。例如[email protected] 。那麼請有人可以指出我哪裏出錯了? 在此先感謝

+0

看看我asnwer –

+1

這個表達式應該工作:) http://ex-parrot.com/~pdw/Mail-RFC822-Address.html –

+0

TLD可能遠遠超過4個字符,請參閱:HTTP:// data.iana.org/TLD/tlds-alpha-by-domain.txt – Toto

回答

2

二組應具有quantitifier允許0字符。這似乎resolve問題:

...([a-zA-Z0-9]*)@... 

更新。正如@Nyx在評論中指出的那樣,上述內容將匹配[email protected]。如果這是要避免的,可以應用zero or more quantitifier到第一組,和one or more到第二:

([a-zA-Z0-9_\-\.]*)([a-zA-Z0-9]+)@... 
+1

我認爲*應該應用於第一組,否則您可以鍵入我。@ gmail.com與。之前 @。 – Nyx

+0

@Nyx,謝謝,更新了你的筆記 – Andrei

0

第一部分預計因爲+的1個或多個字符:

([a-zA-Z0-9_\-\.]+) 

而第二個字符1:

([a-zA-Z0-9]) 

因此,在使2個或更多的字符的結束。