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

时间:2015-05-25 10:51:10

标签: c# string

作为标题,我想在C#中验证字符串是否对IP地址有效,并且我已经使用了

IPAddress.TryParse(value out address)

但似乎并非如此"准确",这意味着如果我输入"500",地址将为"0.0.1.244",因此其"有效"。

但是,我要接受的表单与"xxx.xxx.xxx.xxx"类似,每个字词都小于256。有没有API或方法可以达到这个目的?

6 个答案:

答案 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地址的优点。

您可以查看source code and documentation here

答案 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");
}