ip 正则

本文详细解析了IPv4地址的格式及其对应的正则表达式规则,通过将0-255之间的数字分为不同区间,使得IPv4地址的验证更加直观且易于理解。

ipv4的格式: ×××.×××.×××.×××

每一个×××的取值范围是0-255

可以把数字分成几段来解析

  1. 0-99:          [1-9]?\d
  2. 100-199:      1\d{2}
  3. 200-249:      2[0-4]\d
  4. 250-255:      25[0-5]

使层次更加清晰,可以分两组:

  • 0-199:    ( [1-9]?\d|1\d{2})
  • 200-255:  (2[0-4]\d|25[0-5])

组合起来,一个xxx的正则为:

(([1-9]?\d|1\d{2})|2[0-4]\d|25[0-5])\.

完整匹配ipv4的正则,最后一个没有 . , 所以单独写:

((([1-9]?\d|1\d{2})|2[0-4]\d|25[0-5])\.){3}(([1-9]?\d|1\d{2})|2[0-4]\d|25[0-5])

 

 

你可以使用一个 **IP 正则验证工具类** 来判断字符串是否为合法的 IPv4 或 IPv6 地址,也可以扩展为判断是否为内网 IP、是否包含端口号等。 --- ### ✅ 示例:Java 中的 IP 正则验证工具类 ```java public class IpUtils { /** * 判断是否为合法 IPv4 地址 */ public static boolean isIPv4(String ip) { if (ip == null || ip.isEmpty()) { return false; } String regex = "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"; return ip.matches(regex); } /** * 判断是否为合法 IPv6 地址(简化版) */ public static boolean isIPv6(String ip) { if (ip == null || ip.isEmpty()) { return false; } // 简化正则,匹配常见 IPv6 格式 String regex = "^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$"; return ip.matches(regex); } /** * 判断是否为内网 IPIPv4) */ public static boolean isIntranetIP(String ip) { if (!isIPv4(ip)) { return false; } String[] parts = ip.split("\\."); int first = Integer.parseInt(parts[0]); int second = Integer.parseInt(parts[1]); // 10.0.0.0/8 if (first == 10) { return true; } // 172.16.0.0/12 if (first == 172 && second >= 16 && second <= 31) { return true; } // 192.168.0.0/16 return first == 192 && second == 168; } /** * 判断是否是带端口号的 IP 地址(IPv4:port) */ public static boolean isIpWithPort(String ipPort) { if (ipPort == null || ipPort.isEmpty()) { return false; } String regex = "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?):\\d{1,5}$"; return ipPort.matches(regex); } } ``` --- ### ✅ 使用示例 ```java public class Main { public static void main(String[] args) { System.out.println(IpUtils.isIPv4("192.168.1.1")); // true System.out.println(IpUtils.isIPv6("2001:0db8:85a3:0000:0000:8a2e:0370:7334")); // true System.out.println(IpUtils.isIntranetIP("10.0.0.1")); // true System.out.println(IpUtils.isIpWithPort("192.168.1.1:8080")); // true } } ``` --- ### ✅ 工具类功能总结 | 方法名 | 功能 | |--------|------| | `isIPv4(String ip)` | 判断是否为合法 IPv4 地址 | | `isIPv6(String ip)` | 判断是否为合法 IPv6 地址 | | `isIntranetIP(String ip)` | 判断是否为内网 IP(仅支持 IPv4) | | `isIpWithPort(String ipPort)` | 判断是否为带端口号的 IPv4 地址 | --- ### ✅ 扩展建议 - 支持 CIDR 格式(如 `192.168.1.0/24`) - 支持解析 IPv6 带端口(如 `[2001:db8::1]:8080`) - 支持判断是否为公网 IP - 使用 Apache Commons Validator 或 Guava 提高准确性 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值