2015-05-25 101 views
2

如題,我想驗證一個字符串是否是有效的IP地址或者不是在C#和我使用驗證字符串是否是有效的IP地址或不

IPAddress.TryParse(value out address) 

但似乎沒有所以「準確」,這意味着如果我輸入"500",地址將是"0.0.1.244",所以它的「有效」。

但是,我想要接受的表單就像"xxx.xxx.xxx.xxx",每個字詞都小於256。有沒有任何API或方法可以實現這一目標?

+0

U可以創建自定義的烏爾法..和u能有使用這個parse方法。 –

+0

看看這個正則表達式的答案http://stackoverflow.com/questions/4890789/regex-for-an-ip-address,同樣使用IPAddress.TryParse在http://msdn.microsoft.com/en-us/ library/system.net.ipaddress.tryparse.aspx – ahmedsafan86

+1

偏離主題,但在設計新代碼時,您也應該考慮IPv6。 –

回答

4

你可以很簡單檢查:拆分串,點分離的部分,並確保這將是正好四個部分具有範圍1〜255的值:

string s = "123.123.123.123"; 

var parts = s.Split('.'); 

bool isValid = parts.Length == 4 
       && !parts.Any(
        x => 
        { 
         int y; 
         return Int32.TryParse(x, out y) && y > 255 || y < 1; 
        }); 
+1

謝謝!我想它正是我想要的。 – Alanight

+0

關於「a12.123.123.123」它會失敗,並且不會返回false –

+0

@ArsenMkrtchyan合理。它會拋出異常。修改了代碼。 –

2

如果你不靠的TryParse這裏是一個辦法,以配合xxx.xxx.xxx.xxx

public static bool MyIP(string value) 
    { 
     var x = value.Split('.'); 
     if (!(x.Length==4)) 
      return false; 

     foreach(var i in x) 
     { 
      int q; 
      if (!Int32.TryParse(x, out q)||q.ToString().Length.Equals(x.Length) 
       || q < 0 || q > 255) 
      { 
       return false; 
      } 

     } 

     return true; 
    } 
+0

y是什麼?在哪裏定義或宣佈 – ahmedsafan86

+0

@ ahmedsafan86: - 更新了我的答案! –

+0

你還有y.Length,請修復它。 – ahmedsafan86

-1
string addrString = "192.168.0.1"; 
IPAddress address; 
if (IPAddress.TryParse(addrString, out address)) { 
     //Valid IP, with address containing the IP 
} else { 
     //Invalid IP 
} 
+0

向解決方案添加一些解釋總是一個好主意。 – PiotrWolkowski

+0

K先生,我會記住下次回答其他人的問題 –

3

類似的東西:

private static Boolean IsIP(String value) { 
    if (String.IsNullOrEmpty(value)) 
    return false; 

    String[] items = value.Split('.'); 

    if (items.Length != 4) 
    return false; 

    return items.All(item => { 
    Byte b; 
    // Simplest: you may want use, say, NumberStyles.AllowHexSpecifier to allow hex as well 
    return Byte.TryParse(item, out b); 
    }); 
} 
+0

坦率地說,使用'Byte.TryParse'檢查地址的每個部分是不夠的,因爲0將被成功解析爲字節,所以這會考慮「 0.0.1.244「作爲有效地址。 –

+0

@AndyKorneyev'0'是有效的。曾聽說過'127.0.0.1'? – Magnus

-1

你可以試試你已經做什麼,用短試手之前,確保有正確數量s字符串「」。 https://msdn.microsoft.com/en-us/library/system.net.ipaddress.tryparse.aspx

這將決定字符串是有效的IPv4地址,這不會對IPv6的工作:

var stringToCheck = "192.168.1.1"; 
var countDots = stringToCheck.Split('.').Length - 1; 
if (countDots==3) 
{ 
    IPAddress validIpAddress; 
    if (IPAddress.TryParse(stringToCheck, out validIpAddress)) 
    { 
     //Valid IP, with validIpAddress containing the IP 
     Console.WriteLine("Valid IP"); 
    } 
    else 
    { 
     //Invalid IP 
     Console.WriteLine("Invalid IP"); 
    } 
} 
else 
{ 
    // Invalid as no "." in string, not even worth checking 
    Console.WriteLine("Invalid IP not correct number Dots"); 
} 
+0

確實爲''500''返回'true',這肯定不是一個虛擬IP地址。 – molnargab

+0

我編輯了我的答案,檢查「。」在stringToCheck中 – DermFrench