我希望在我的最后一个八位字节中只有 0|64|128|192(对于带有/26 掩码的子网)。用于验证 IP 地址的第一个代码工作正常。但是我无法获得最后一个八位字节工作的验证。不知道我在这里做错了什么
我正在寻找 172.17.251.64 应该被允许 172.17.251.200 不应该被允许
<input name="ipAddress" title="Input data should be in IP Address Format" type="text" pattern="^(d|[1-9]d|1dd|2([0-4]d|5[0-5])).(d|[1-9]d|1dd|2([0-4]d|5[0-5])).(d|[1-9]d|1dd|2([0-4]d|5[0-5])).(d|[1-9]d|1dd|2([0-4]d|5[0-5]))$">
<input name="subnet" title="Input data should be in Subnet Format" type="text" pattern="^(d|[1-9]d|1dd|2([0-4]d|5[0-5])).(d|[1-9]d|1dd|2([0-4]d|5[0-5])).(d|[1-9]d|1dd|2([0-4]d|5[0-5])).(0|64|128|192))$">
要了解您的错误所在,请转到 regex101.com,并使用具有 PCRE 风格的 /x
选项,并尝试将表达式分成几行以检查正则表达式的结构。请参阅此演示:
^
(d|[1-9]d|1dd|2
([0-4]d|5[0-5])
)
.
(d|[1-9]d|1dd|2
([0-4]d|5[0-5])
)
.
(d|[1-9]d|1dd|2
([0-4]d|5[0-5])
)
.
(d|[1-9]d|1dd|2([0-4]d|5[0-5])) # THIS SHOULD BE REPLACED!!!
$
所以,使用
^(d|[1-9]d|1dd|2([0-4]d|5[0-5])).(d|[1-9]d|1dd|2([0-4]d|5[0-5])).(d|[1-9]d|1dd|2([0-4]d|5[0-5])).(0|64|128|192)$
^^^^^^^^^^^^^^
查看正则表达式演示
请注意,您可以从正则表达式中删除^
和$
pattern
因为默认情况下属性值是锚定的(它用 ^(?:
和 )$
括起来)。