如何用LINQ实现带特定前导零规则的IP地址有效性判断
实现方案
你需要的前导零校验逻辑可以直接通过LINQ的字符串操作实现,完整代码如下:
public static bool is_valid_IP(String ip) { try { return ip.Split('.') is var segments && segments.Length == 4 && segments.All(x => Convert.ToInt32(x) is >=0 and <=255 && (x.Length == 1 || (x.Length == 3 && x.All(c => c == '0'))) ); } catch(Exception) { return false; } }
注:如果使用低于C# 9的版本,可将
Convert.ToInt32(x) is >=0 and <=255替换为Convert.ToInt32(x) >=0 && Convert.ToInt32(x) <=255即可。
逻辑说明
- 先把IP按
.拆分为分段数组,首先校验拆分后的分段数必须刚好为4 - 用
All方法校验所有分段同时满足以下规则:- 转换为整数后取值范围在0~255之间
- 要么分段长度为1,不存在前导零问题
- 要么分段长度刚好为3且所有字符都是
0,即仅允许000这种特殊前导零情况
- 外层try catch会捕获非数字字符、空分段等转换异常,直接返回false,符合合法性校验要求
测试用例匹配验证
0:长度为1,返回true000:长度3且全为0,返回true01:长度为2且存在前导零,返回false001:长度3但非全0,返回false20:长度2且无前置零,返回true
内容的提问来源于stack exchange,提问作者SolarOsQuiere
相关产品推荐
相关产品推荐

