Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Regexp验证最后一位为非零的ip地址_Javascript_Regex_Angular_Angular Forms - Fatal编程技术网

Javascript Regexp验证最后一位为非零的ip地址

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];:::::::::::::::::::::::::::::::

我有一个正则表达式,我最终使用了其中一个答案。 基本上,我的正则表达式必须使用掩码验证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 |代码)

现在我的挑战是不允许ip的最后一位数字为0,即,
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正在运行。感谢您的帮助,这在没有掩码的情况下也可以运行。为寻找没有掩码的验证的人向上投票。感谢您的回答