使用IPAddress.TryParse()方法校验IP地址时不得不知的“坑”

使用IPAddress类的静态方法TryParse可以校验IP地址。具体用法如下所示。

IPAddress ip;
IPAddress.TryParse("8", out ip);
Console.WriteLine(ip);

执行上面的代码,会得到“0.0.0.8”的输出。
但是实际使用中,往往这不是我们想要的。使用该方法校验用户输入的ip地址就不太合理。一般来说,ip地址格式应该是”xxx.xxx.xxx.xxx”,而使用IPAddress类的静态方法TryParse校验ip地址时,随意输入一个整形字符串,也校验通过了。简直让人一脸懵逼。对于这种需求下,可以使用正则表达式来校验ip地址。下面是完整代码。

public static bool IPCheck(string IP)
{
    return Regex.IsMatch(IP, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");
}

那么类IPAddress的静态方法TryParse的判断逻辑是怎样的呢?
TryParse方法先判断字符串是否能转换成uint类型数据,不能则返回false,转换成功则将uint数据转换成32位二进制数据,每八位二进制数据转换成十进制数,便转换成了最终的ip地址。像例子中的8转换成32位二进制数据为00000000000000000000000000001000,转换成ip地址为0.0.0.8。

看来以后校验ip地址还是老老实实使用正则吧。

IPv6的正则表达式可以根据不同的需求来编写。以下是一个示例的IPv6正则表达式: ^(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}$ 这个正则表达式将IPv6地址分为8个16位的块,每个块由一个冒号分隔开。每个块由十六进制数字(A-F)和数字(0-9)组成。这个正则表达式只适用于标准的IPv6地址格式,不包括压缩的IPv6地址。 请注意,正则表达式只能验证IPv6地址的格式是否正确,无法验证地址的有效性。如果您需要验证一个IPv6地址的有效性,可以使用特定的编程语言和库,如C#的IpAddress.TryParse()方法进行更准确的验证。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [IPV4和IPV6正则表达式的深入讲解](https://download.csdn.net/download/weixin_38629801/14621756)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [IPv6Regex:PowerShell脚本将IPv6地址与测试IPv6正则表达式和.Net TryParse方法进行匹配](https://download.csdn.net/download/weixin_42117224/18374821)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [js:校验IPv6地址的正则表达式](https://download.csdn.net/download/weixin_38520275/14903291)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值