Javascript Regexp验证最后一位为非零的ip地址
我有一个正则表达式,我最终使用了其中一个答案。 基本上,我的正则表达式必须使用掩码验证ipv4地址 因此,我最终使用了以下正则表达式: (以下代码:::::(以下以下以下代码::::::::::::::::::::::::::::::::::::::::::::[0-5 0-5 5[0-0-5[0-0-5[0-5[0-0-5]5 5 5[0-5 5 5 5 5[0-0-0-5 5 5 5[0-5[0-5[0-5[0-5[0-0-5];::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::25[0-5[0-5 128 | 192 | 224 | 240 | 248 | 252 | 254)\.0 |(255 | 255 |(0 | 128 | 192 | 224 | 240 | 248 | 252 | 254)\.0 |(255 | 255 | 255 |(0 | 128 | 192 | 224; 224; 224 240 | 248 252 | 254 |代码)254> 现在我的挑战是不允许ip的最后一位数字为0,即,Javascript Regexp验证最后一位为非零的ip地址,javascript,regex,angular,angular-forms,Javascript,Regex,Angular,Angular Forms,我有一个正则表达式,我最终使用了其中一个答案。 基本上,我的正则表达式必须使用掩码验证ipv4地址 因此,我最终使用了以下正则表达式: (以下代码:::::(以下以下以下代码::::::::::::::::::::::::::::::::::::::::::::[0-5 0-5 5[0-0-5[0-0-5[0-5[0-0-5]5 5 5[0-5 5 5 5 5[0-0-0-5 5 5 5[0-5[0-5[0-5[0-5[0-0-5];:::::::::::::::::::::::::::::::
192.168.6.10/mask
有效,但192.168.6.0/mask
无效
因此,我将上述regexp修改为如下内容:
(以下代码::::::::::::::::::::::::::::::::::::::::[0-9][0-9[0-9[0-9[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-0-5[0-5[0-5[0-5[0-5[0-0-5[124::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.0\.0);(255\.(0 | 128 | 192 | 224 | 240 | 248 | 252 | 254)\.0\.0);(255\.255 |(0 | 128 | 192 | 224 | 248 | 252 254)\.0);(255.255 | 255 | 255 |(0 | 128 | 192 | 224 | 224 | 254 |代码
但是当使用角度验证器进行测试时,192.168.6.0
始终有效
知道我哪里出错了吗
编辑
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无效您可以尝试使用此模式
(1-9[0-9][0-9][0-9[0-9[0-9][0-9[0-9][0-4][0-4[0-4][0-9[0-9[0-9[0-5[0-5 5 5[0-9]上述上述上述几点::([1-9[1-9[1-9[1-9[1-9[1-9[0-9][1-9][1-9[1-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9 1-9][1-9][1-9][1-9][1-9])$
在线
对于最后的数字,请检查此项
(?:2[0-5][1-5]|[1-9]|[1[0-9][1-9]|[1-9][1-9])
这里一种可能的方法很简单,只需要在模式的最末端添加一个负面的lookback(?),它断言.0
不是IP地址中的前一个术语。根据上面的注释将其应用于您的正确工作模式,我们得到:
^(?:(?: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)$
((?: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))))(?
缺点是您的JavaScript引擎可能还不支持负查找语法。假设最后一部分不能写000
和00
,而只能写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
您希望避免将任何IP与设置为0
的最后一个八位字节相匹配
你可以用
ipAddress : FormControl = new FormControl('' , Validators.pattern(/^(?!(?:\d+\.){3}0(?:\/|$))(?:(?: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)))$/));
这是你的电话号码
主要添加的是在字符串开始处执行一次的^
后的先行查找。(?!(?:\d+\){3}0(?:\/$)
模式是一种负先行查找,如果在当前位置(字符串开始)的右侧出现以下情况,则匹配失败:
(?:\d+\){3}
-三个1+数字和一个点的重复
0
-零
(?:\/$)
-/
或(
)字符串结尾($
)
注意,我使用正则表达式文字符号(/regex/
)定义了模式,并且我必须添加^
(字符串开始)和$
(字符串结束)锚定,因为默认情况下不再锚定正则表达式。此外,要在正则表达式文字符号中转义特殊字符,您只需要一个反斜杠,而不是两个。您可以提供有效和无效IP的列表吗?@Gurman已将其添加到您当前的正则表达式中,或与任何内容匹配。投票以键入问题的形式结束。@TimBiegeleisen这里是stackblitz示例le用于验证工作:我将尝试此方法。感谢您的回答最后一组ip地址失败,如果是这样的:60.243.33.90
我尝试使用此方法,但实际上我输入的所有ip都失败。更新了示例:@crueengine在继续使用regex之前,请阅读道歉,我将我已经删除了”
,现在exp正在运行。感谢您的帮助,这在没有掩码的情况下也可以运行。为寻找没有掩码的验证的人向上投票。感谢您的回答