验证字符串是否对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或方法可以做到这一点吗?

验证字符串是否对IP地址有效

你可以很直接地检查它:将字符串分割成以点分隔的部分,并确保它恰好是四个部分,其值范围在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");
}