先进的ipv6验证

时间:2019-07-19 07:25:49

标签: regex kotlin

我的正则表达式不那么强。我要解决的问题是使用Regex验证Ipv6地址,并将前导0视为无效地址。

例如:

  • 01 :: 0.255.255.255-无效
  • 0 :: 00.255.255.255-无效
  • 0 :: 0.255.255.255-有效
  • :: 00-无效
  • :: 0001-无效
  • ::-有效

以此类推

我有这个正则表达式:

val ipv6 = Pattern.compile("^(((?=(?>.*?::)(?!.*::)))(::)?(0{0,1}|[1-9A-F]{1,4}::?){0,5}"
            + "|([0-9A-F]{1,4}:){6})(\\2([0-9A-F]{1,4}(::?|$)){0,2}|((25[0-5]"
            + "|(2[0-4]|1\\d|[1-9])?\\d)(\\.|$)){4}|[0-9A-F]{1,4}:[0-9A-F]{1,"
            + "4})(?<![^:]:|\\.)\\z")

未转义的正则表达式(带有单个反斜杠,没有换行符),用于测试:

^(((?=(?>.*?::)(?!.*::)))(::)?(0{0,1}|[1-9A-F]{1,4}::?){0,5}|([0-9A-F]{1,4}:){6})(\2([0-9A-F]{1,4}(::?|$)){0,2}|((25[0-5]|(2[0-4]|1\d|[1-9])?\d)(\.|$)){4}|[0-9A-F]{1,4}:[0-9A-F]{1,4})(?<![^:]:|\.)\z

仍然认为上述地址有效,如何修改它以使对前导0的验证无效?

0 个答案:

没有答案