C#判断IP地址是否正确
参考文章:C# 判断ip地址是否正确
楼主提供的方法是通过IPAddress.TryParse(String, IPAddress)
来判断字符串是否为有效地址,如果能解析IP地址,则为true
。这个方法也蛮巧妙的,判断IP地址我第一反应是根据'.'
分割字符串然后每个字符挨个判断,手动写格式判断啥的,效率低还麻烦,容易出错,看到楼主那个还挺好玩的,就试了一下。发现了一些问题:
IPAddress.TryParse()方法
string ipStr = "10.1";
System.Net.IPAddress ip;
if (System.Net.IPAddress.TryParse(ipStr,out ip))
{
MessageBox.Show("IP地址合法");
}
else
{
MessageBox.Show("IP地址不合法");
}
这个方法没办法对输入的IP的格式进行判断,测试字符串是10.1在测试过程中是可以成功转换的,但是显然输入的IP不是有效地址。可以转换成功的原因是IPAddress.TryParse()
方法接受有效的String
值,可以分析为一个Int64
值,然后将这个值作为IP地址的长值,这就意味着只要接受到的字符串可以成功解析成一个Int64
值就会返回True
,即使它表示的不是有效的IP地址。
微软技术文档在说明该方法时提供了以下注解:
例如,如果 ipString 为“1”,则此方法返回 true,即使“1” (或 0.0.0.1) 不是有效的 IP 地址,你可能期望此方法返回 false。 修复此 bug 会中断现有应用,因此不会更改当前行为。 代码可以通过确保仅使用此方法分析采用点十进制格式的 IP 地址来避免此行为。
楼主评论区中有人提出可以用正则表达式来判断,既能判断格式也能判断数值,一举两得。
正则表达式
System.Text.RegularExpressions.Regex rx = new System.Text.RegularExpressions.Regex(@"\b((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))\b");
string ipStr = "10.1";
if (rx.IsMatch(ipStr) == false)
{
MessageBox.Show("IP地址不合法");
return;
}
else
{
MessageBox.Show("IP地址合法");
}
作者:🥝PixelKiwi
出处:https://www.cnblogs.com/PixelKiwi/p/17094787.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)