2011-04-11 22 views
1

我有字符串格式ipaddress字符串幫助:要求在驗證使用正則表達式

172.60.136.145,172.60.136.146,172.60.136.147,........

,我需要幫助在使用正則表達式

+1

某些表示您正在使用的語言可能會有幫助。 – 2011-04-11 07:48:11

回答

-1

字符串中驗證IpAddresses嘗試用:

/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ 
+0

這隻會驗證一個'ipaddress'不是嗎?作爲例子包含一個字符串與許多,逗號分離。此外,這些數字可能是任何無效的值 – 2011-04-11 07:26:36

+1

'999.999.999.999' – KingCrunch 2011-04-11 07:26:53

+0

是的......有沒有辦法處理逗號分離的ip地址 – 2011-04-11 07:30:11

0

我不知道正則表達式是您最好的選擇這裏的IP地址纔有效,如果數字是254或更少

我會在逗號分割字符串,然後將它們中的每一個按句點分割。我會檢查是否有4個部分,每個部分可以轉換爲254或更少的數字。

像這樣未經測試的僞代碼

string[] addresses = myString.Split(","); 
foreach(string address in addresses) 
{ 
    string[] numbers = address.Split("."); 
    if (numbers.Length==4) 
    { 
     Foreach(string number in numbers) 
     { 
       // need to check that the last number is not a zero as well - not shown here 
       int value = Convert.ToInt32(number); 
       if (value<0 && value>254) 
       { 
        //invalid 
       } 
     } 
    } 
    else 
    { 
     //invalid 
    } 
} 

有可能,你可以在你的語言使用,以幫助這一類,但你不說,它是什麼語言。你可以在C#中做到這一點:

string[] addresses = myString.Split(","); 
foreach(string address in addresses) 
{ 
    IpAddress ipAddress; 
    if (!IpAddress.TryParse(address, out ipAddress)) 
    { 
     //invalid 
    } 
} 

,如果你只是想無效問卷,你可以這樣做:

IPAddress ipAddress; 
string[] addresses = myString.Split (","); 
foreach (string address in addresses.Where (address => !IPAddress.TryParse (address, out ipAddress))) 
    { 
     //all elements in this loop will be invalid entries 
     // remove the '!' to get only the valid ones 
    } 
4

對於具體的如上述

172\.60\.136\.[0-9]{1-3} 

其指甲它專門到範圍從172.60.136.0到999

當然,這不包括有效的IP,這將允許17 2.60.136.0或172.60.136.999

(0?0?[1-9]|0?[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])(\\.(0?0?[0-9]|0?[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])){2}(\\.(0?0?[1-9]|0?[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])) 

是否測試的IP是有效的,它允許1.0.0.1,通過254.254.254.254,不會允許任何以.0等

+1

+1用於提供正則表達式作爲OP請求。一個噩夢的位雖然 – 2011-04-11 07:42:25

+0

是啊,它有點一口。但是爲了得到這樣一個事實,即0可以處於中間狀態,因爲10.0.0.1非常有效,但0.xxx不是xxx0等,並且在上述情況下允許鍵入010.000.000.001的人煩人... – BugFinder 2011-04-11 07:47:49

1

結束在PHP:

$tmp = explode(',', $ips); 
$tmp = array_map('ip2long', $tmp); 
if (array_search(false, $tmp, true) !== false) { 
    // at least one ip is invalid 
} 
+0

這種語言的說明可能會幫助未來的人... – 2011-04-11 07:43:10

+0

沒有注意到,它沒有在問題中指定。感謝提示。 – KingCrunch 2011-04-11 07:43:55