如題,我想驗證一個字符串是否是有效的IP地址或者不是在C#和我使用驗證字符串是否是有效的IP地址或不
IPAddress.TryParse(value out address)
但似乎沒有所以「準確」,這意味着如果我輸入"500"
,地址將是"0.0.1.244"
,所以它的「有效」。
但是,我想要接受的表單就像"xxx.xxx.xxx.xxx"
,每個字詞都小於256
。有沒有任何API或方法可以實現這一目標?
如題,我想驗證一個字符串是否是有效的IP地址或者不是在C#和我使用驗證字符串是否是有效的IP地址或不
IPAddress.TryParse(value out address)
但似乎沒有所以「準確」,這意味着如果我輸入"500"
,地址將是"0.0.1.244"
,所以它的「有效」。
但是,我想要接受的表單就像"xxx.xxx.xxx.xxx"
,每個字詞都小於256
。有沒有任何API或方法可以實現這一目標?
你可以很簡單檢查:拆分串,點分離的部分,並確保這將是正好四個部分具有範圍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;
});
謝謝!我想它正是我想要的。 – Alanight
關於「a12.123.123.123」它會失敗,並且不會返回false –
@ArsenMkrtchyan合理。它會拋出異常。修改了代碼。 –
如果你不靠的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;
}
如果你不想做解析自己NuGet包IPAddressRange會爲你做它。它還具有支持IPv6地址的優點。您可以查看source code and documentation here。
string addrString = "192.168.0.1";
IPAddress address;
if (IPAddress.TryParse(addrString, out address)) {
//Valid IP, with address containing the IP
} else {
//Invalid IP
}
向解決方案添加一些解釋總是一個好主意。 – PiotrWolkowski
K先生,我會記住下次回答其他人的問題 –
類似的東西:
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);
});
}
坦率地說,使用'Byte.TryParse'檢查地址的每個部分是不夠的,因爲0將被成功解析爲字節,所以這會考慮「 0.0.1.244「作爲有效地址。 –
@AndyKorneyev'0'是有效的。曾聽說過'127.0.0.1'? – Magnus
你可以試試你已經做什麼,用短試手之前,確保有正確數量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");
}
確實爲''500''返回'true',這肯定不是一個虛擬IP地址。 – molnargab
我編輯了我的答案,檢查「。」在stringToCheck中 – DermFrench
U可以創建自定義的烏爾法..和u能有使用這個parse方法。 –
看看這個正則表達式的答案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
偏離主題,但在設計新代碼時,您也應該考慮IPv6。 –