Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 验证字符串是否对IP地址有效_C#_String - Fatal编程技术网

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

C# 验证字符串是否对IP地址有效,c#,string,C#,String,作为标题,我想验证字符串在C#中是否对IP地址有效,我使用了 IPAddress.TryParse(value out address) 但它似乎不那么“准确”,这意味着如果我输入“500”,地址将是“0.0.1.244”,因此它是“有效的” 但是,我想接受的形式类似于“xxx.xxx.xxx.xxx”,每个术语少于256。是否有任何API或方法可以实现这一点?如果您不依赖TryParse,这里有一种方法可以匹配xxx.xxx.xxx.xxx public static bool MyIP(s

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

IPAddress.TryParse(value out address)
但它似乎不那么“准确”,这意味着如果我输入
“500”
,地址将是
“0.0.1.244”
,因此它是“有效的”


但是,我想接受的形式类似于
“xxx.xxx.xxx.xxx”
,每个术语少于
256
。是否有任何API或方法可以实现这一点?

如果您不依赖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;
    }
公共静态bool MyIP(字符串值)
{
var x=值。拆分('.');
如果(!(x.Length==4))
返回false;
foreach(x中的变量i)
{
int-q;
如果(!Int32.TryParse(x,out q)| | q.ToString().Length.Equals(x.Length)
||q<0 | | q>255)
{ 
返回false;
}
}
返回true;
}

您可以非常简单地检查它:将字符串拆分为以点分隔的部分,并确保它正好是四个部分,其值范围为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;
                   });
string s=“123.123.123.123”;
var parts=s.Split('.');
bool isValid=parts.Length==4
&& !零件,有吗(
x=>
{
int-y;
返回Int32.TryParse(x,out y)和&y>255 | | y<1;
});

如果您不想自己进行解析,NuGet软件包会帮您完成。它还具有支持IPv6地址的优势

你可以查一下

诸如此类:

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 _));
}

您可以尝试您已经在做的事情,在此之前进行一个简短的测试,以确保字符串中有正确的“.”数。

它将确定字符串是否为有效的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");
}


你可以创建你的自定义方法。。你可以在那里使用这个解析方法。看看这个关于regex的答案,也可以在主题外使用IPAddress.TryParse,但是在设计新代码时,你也应该考虑IPv6。这不是说我尝试过什么,但regex在这里没有帮助吗?可能有兴趣:y是什么?它的定义是什么declared@ahmedsafan86:-更新了我的答案!你仍然有y。长度,请修复它。坦白地说,用<代码>字节检查地址的每个部分。TyPARSE < /C>是不够的,因为0将被成功地解析为字节,因此这将被认为是“0.0.1.244”作为有效地址。@ ANYYKONYYEV <代码> 0 < /代码>是有效的。听说过
127.0.0.1
?对于
“500”
,它确实返回了
true
,这肯定不是一个有效的IP地址。我编辑了我的答案,以检查StringToCheckHanks中的“.”!我想这正是我想要的。在“a12.123.123.123”中,它将失败,不再返回false@ArsenMkrtchyan合理的。但它将抛出异常。我已经修改了代码。而且我认为条件应该是这样的Int32.TryParse(x,out y)&&y>=1&&y<255@ArsenMkrtchyan不同意。看看这里:
!parts.Any(
并注意否定运算符。在您的解决方案中添加一些解释始终是一个好主意。K先生,我会记住它,并在下次回答其他人问题时遵循它
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");
}