IP 地址子网的正则表达式



我希望在我的最后一个八位字节中只有 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因为默认情况下属性值是锚定的(它用 ^(?:)$ 括起来)。

最新更新