C# 验证字符串是否对IP地址有效
作为标题,我想验证字符串在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
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");
}