首页 > 解决方案 > 正则表达式以验证最后一位非零的 IP 地址

问题描述

我有一个正则表达式,我最终从 SO 中的一个答案中使用它。基本上我的正则表达式必须使用 mask 验证 ipv4 地址。

所以我最终使用了下面的正则表达式:

(?:(?: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]?)/([1-9]|1[0-9]|2[0-9]|3[0-2]|(((128|192|224|240|248|252|254)\.0\.0\.0)|(255\.(0|128|192|224|240|248|252|254)\.0\.0)|(255\.255\.(0|128|192|224|240|248|252|254)\.0)|(255\.255\.255\.(0|128|192|224|240|248|252|254))))

现在我的挑战是不允许 0 在 ip 的最后一位数字中,即 192.168.6.10/mask有效但192.168.6.0/mask无效

所以我将上面的正则表达式修改为这样的:

(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[1][0-9][0-9]|[1-9][0-9]|[1-9]?)/([1-9]|1[0-9]|2[0-9]|3[0-2]|(((128|192|224|240|248|252|254)\.0\.0\.0)|(255\.(0|128|192|224|240|248|252|254)\.0\.0)|(255\.255\.(0|128|192|224|240|248|252|254)\.0)|(255\.255\.255\.(0|128|192|224|240|248|252|254))))

192.168.6.0在使用 Angular 进行测试时始终有效Validators.pattern

知道我哪里出错了吗?

编辑 IP 列表及其有效性:

192.168.6.6/24 有效 192.168.6.6/24 有效 192.168.6.24/24 有效

192.168.6.0/24 无效 192.168.6.0/255.255.255.0 无效

标签: javascriptregexangularangular-forms

解决方案


假设最后一部分不能写00000而只是0。那么你可以这样的正则表达式

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

其中第一组和最后一组之间的差异应该是从 1 到 9

演示


推荐阅读