验证字符串是否对IP地址有效
本文关键字:地址 有效 IP 字符串 是否 验证 | 更新日期: 2023-09-27 17:50:35
作为标题,我想验证一个字符串在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;
});
像这样:
private static Boolean IsIP(String value) {
if (String.IsNullOrEmpty(value))
return false;
var items = value.Split('.');
if (items.Length != 4)
return false;
// Simplest: you may want use, say, NumberStyles.AllowHexSpecifier to allow hex as well
return items.All(item => byte.TryParse(item, out _));
}
如果你不依赖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地址的优点。
您可以在这里查看源代码和文档。
string addrString = "192.168.0.1";
IPAddress address;
if (IPAddress.TryParse(addrString, out address)) {
//Valid IP, with address containing the IP
} else {
//Invalid IP
}
您可以尝试您已经在做的事情,在手之前进行一个简短的测试,以确保有正确的"。在字符串中。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");
}