2014-04-09 71 views
0

我想匹配一個字符串,包含'*'或逗號分隔的IPv4地址列表。正則表達式的IP地址列表

用於一個IP或星形以下工作:?

/^(:(:(?: 25 [0-5] | 2 [0-4] [0-9] | [01] [0-9] [0-9])){3}(?: 25 [0-5] |?2 [0-4] [0-9] | [01] - [O- ?9] [0-9])| *)$/

而且我試着採用這種具有IP地址的列表或星:

/^(:^ |,)(?:(?:(?: 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]?)| *)$/

但它不按預期工作。

你能幫我嗎?

THX, 托馬斯

+0

我認爲你只想匹配IPv4? –

+0

如果你能爲你的嘗試提供樣本輸入,期望和實際輸出,那將會很棒。製作小提琴會更好。 –

+0

'*'是一個特殊字符,所以如果你想在一個字符串(你的IP地址)中找到它,你必須像'\ *'那樣轉義它。我不確定這是否是唯一的問題,所以我沒有把它作爲答案。 –

回答

1

因爲你是具體的關於對IP地址接受的數字,

/^\*$|^(?:\d|1?\d\d|2[0-4]\d|25[0-5])(?:\.(?:\d|1?\d\d|2[0-4]\d|25[0-5])){3}(?:\s*,\s*(?:\d|1?\d\d|2[0-4]\d|25[0-5])(?:\.(?:\d|1?\d\d|2[0-4]\d|25[0-5])){3})*$/ 
// * or IP= 0-255     .0-255 (3 more times)   then (, IP) 0 or mote times 

如果必須我只用一個正則表達式這樣只用一個正則表達式檢查有效性,因爲它可能會更清晰地分解成幾個步驟,否則。

// some func 
var reIP = /^(?:\d|1?\d\d|2[0-4]\d|25[0-5])(?:\.(?:\d|1?\d\d|2[0-4]\d|25[0-5])){3}$/, 
    tokens = str.split(/\s*,\s*/), i; 
for (i = 0; i < tokens.length; ++i) 
    if (!reIP.test(tokens[i])) 
     return false; 
return true; 
+0

thx用於共享。但是這個正則表達式不允許在IP地址的第二個八位字節開始超過2位數字。那裏有什麼可能是錯的?例如:/^\*$|^(?:\d|1?\d\d|2[0-4]\d|25[0-5])(?:\.\d|1?\d \ d | 2 [0-4] \ d | 25 [0-5]){3}(:\ S *,\ S *(:???\ d | 1 \ d \ d | 2 [0-4 ] \ d | 25 [0-5])(:\ \ d | 1 \ d \ d | 2 [0-4] \ d | 25 [0-5]){3})* $ /??。測試「192.168.1.1」 false – user3515524

+0

當然,我可以這樣做,並且很快也在考慮這樣做。但是對於這個項目,最好通過正則表達式來檢查。 – user3515524

+0

哦,我忘了分組 –