具有8个或更多零的八位字节的IP地址是否为有效的IP地址?

时间:2014-08-07 20:11:04

标签: java regex ip ipv4

此处验证IP地址的top voted answer是正则表达式,因此自动不利)如果在一个八位字节中为其指定一个包含4个或更多零的IP地址,则返回false。

请注意,它通过3或更少,在我看来,由于任意不一致自动指示代码气味(毕竟它不是基数8,所以在基数10中没有什么特别的3)。然而,令人惊讶的是,apache commons实用程序InetAddressValidator也有这种行为(至少它只使用正则表达式进行拆分!)。

观察(使用Scala REPL):

scala> new InetAddressValidator().isValidInet4Address("000.0.0.0")
res0: Boolean = true

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

现在this answer将返回true,因为它在一个循环中使用parseInt,它不会对零个数字进行任意区分。

它有效吗?如果它是有效的,那么这表示Apache Commons库和所述正则表达式中的错误,如果它无效,则请提供证明它的内容的链接。

1 个答案:

答案 0 :(得分:3)

是的,它是有效的。

Wikipedia article on Dot-decimal notation以外的IPv4地址:

  

Internet协议版本4(IPv4)地址由32位组成,   它可以分为四个八位字节,每个八位。这四个八位字节   用十进制数写,范围从0到255,并且是   连接为一个字符串,其间有完整的分隔符   号。

有效的十进制数可能会也可能不会从前导0开始,并且对前导0的数量不应有内在限制。维基页面确实澄清了领先的0是有效的,但没有明确提到对前导零数量的任何限制。