2009-06-19 70 views
0

這是用於文本框驗證。我需要匹配域如何爲域列表創建正則表達式?

列表用於匹配

google.com,msn.com,texas.edu.gov.us

msn.com

NON- MATCHES

google.com,msn.com,

@ msn.com,@ google.com

[email protected]

沒有後面的逗號(這就是我被卡住)

這是我到目前爲止但逗號分隔的部分是不工作的權利:

^([([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}]+\s*)+,$ 

回答

2

「有些人,問題,認爲「我知道,我會用正則表達式。」現在他們有兩個問題。「 - 傑米Zawinski

這是一個正則表達式,將做你想做的。它會處理逗號分隔的域名列表,確保域名中沒有非法字符,並強制域名的長度(我認爲它是63而不是61,但你有61,所以我離開那樣)

^\ S *(([A-ZA-Z0-9] [A-ZA-Z0-9 - ]。{0,61} [A-ZA-Z0-9]([A-ZA-Z0-9 ] {2,6-})+)+ \ S *,\ S *)*([A-ZA-Z0-9] [A-ZA-Z0-9 - ] {0,61} [A-ZA-Z0 -9]?(。[a-zA-Z0-9] {2,6})+)$

*注意[a-zA-Z0-9]代替[\ w],因爲下劃線是包含在\ w但不允許在域名中

2

在我看來,你最好成幾部分用正則表達式像\s*,\s*第一分割字符串,然後驗證每個域seperately。試圖將它全部推入單個正則表達式中,如果您稍後嘗試更改邏輯,將會使您的生活變得艱難。

驗證正則表達式的域名應該有效。我不知道你是否故意禁止一些有效的域名。一個更通用的域匹配的正則表達式是:

^[\w-]+(\.[\w-]+)+$ 

但即使這樣一個不允許localhost,這可能會或可能不會在你的情況不允許。對於其他方面的規格來說太鬆了。爲了更嚴格和更加混淆,可以選擇將[\w-]+替換爲[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]?,儘管它仍然不會使根據規範無效的僅限數字的記錄無效。你需要的確切程度如何?

忽視的東西,關於第一分割字符串,根據我上面的例子正則表達式,你可以使用下面的怪物,以匹配域列表:當與面臨

^\s*([\w-]+(\.[\w-]+)+\s*,\s*)*[\w-]+(\.[\w-]+)+\s*$