Java 由4个或更多零组成的八位字节的IP地址是有效的IP地址吗?

Java 由4个或更多零组成的八位字节的IP地址是有效的IP地址吗?,java,regex,ip,ipv4,Java,Regex,Ip,Ipv4,此处用于验证IP地址的(这是一个正则表达式,因此自动不受欢迎)如果在一个八位字节中给它一个包含4个或更多零的IP地址,则返回false 请注意,它以3或更少的值通过,在我看来,由于任意的不一致性(毕竟它不是基数8,所以基数10中的3没有什么特别之处),它会自动指示代码气味。然而,令人惊讶的是,apachecommons实用工具InetAddressValidator也有这种行为(至少它只使用regex进行拆分!) 观察(使用Scala REPL): 现在将返回true,因为它在一个循环中使用pa

此处用于验证IP地址的(这是一个正则表达式,因此自动不受欢迎)如果在一个八位字节中给它一个包含4个或更多零的IP地址,则返回false

请注意,它以3或更少的值通过,在我看来,由于任意的不一致性(毕竟它不是基数8,所以基数10中的3没有什么特别之处),它会自动指示代码气味。然而,令人惊讶的是,apachecommons实用工具InetAddressValidator也有这种行为(至少它只使用regex进行拆分!)

观察(使用Scala REPL):

现在将返回true,因为它在一个循环中使用
parseInt
,该循环不任意区分零数

那么它有效吗?如果它有效,则表示Apache Commons库和所述正则表达式中存在错误;如果它无效,则请提供一个链接,指向证明它的内容

是的,它是有效的

除IPv4地址以外的其他地址:

Internet协议版本4(IPv4)地址由32位组成, 可分为四个八位字节,每个八位字节8位。这四个八位组 以十进制数字表示,范围从0到255,并且 连接为字符串,字符串之间带有句号分隔符 号码


有效的十进制数可以或不可以以前导0开头,并且对前导0的数量不应有内在限制。wiki页面确实澄清了前导0是有效的,但没有明确提到前导0数量的任何限制。

。。。如果我给一个前导为零的八位字节加上“ping”(在Linux或Windows上)或将其输入浏览器,它会将该八位字节视为一个八进制数!因此,如果我告诉我的浏览器转到176.040.0142.166,它就会转到176.32.98.166(amazon.com)。因此,如果你和维基百科对该标准的看法是正确的,那么许多其他工具都是以非标准方式运行的。我看到维基百科的文章提到……是的,这很令人困惑令人沮丧的是,这是一个如此基础的概念@ajb
scala> new InetAddressValidator().isValidInet4Address("000.0.0.0")
res0: Boolean = true

scala> new InetAddressValidator().isValidInet4Address("0000.0.0.0")
res1: Boolean = false