作为标题,我想在C#中验证字符串是否对IP地址有效,并且我已经使用了
IPAddress.TryParse(value out address)
但似乎并非如此"准确",这意味着如果我输入"500"
,地址将为"0.0.1.244"
,因此其"有效"。
但是,我要接受的表单与"xxx.xxx.xxx.xxx"
类似,每个字词都小于256
。有没有API或方法可以达到这个目的?
答案 0 :(得分: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 :(得分: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);
});
}
答案 2 :(得分: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;
}
答案 3 :(得分:2)
如果你不想自己解析,NuGet包IPAddressRange会为你做。它还具有支持IPv6地址的优点。
答案 4 :(得分:-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
}
答案 5 :(得分:-1)
您可以尝试一下您已经在做的事情,并进行简短的测试,以确保字符串中有正确数量的&#34;。&#34; 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");
}