此处验证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库和所述正则表达式中的错误,如果它无效,则请提供证明它的内容的链接。
答案 0 :(得分:3)
是的,它是有效的。
除Wikipedia article on Dot-decimal notation以外的IPv4地址:
Internet协议版本4(IPv4)地址由32位组成, 它可以分为四个八位字节,每个八位。这四个八位字节 用十进制数写,范围从0到255,并且是 连接为一个字符串,其间有完整的分隔符 号。
有效的十进制数可能会也可能不会从前导0开始,并且对前导0的数量不应有内在限制。维基页面确实澄清了领先的0是有效的,但没有明确提到对前导零数量的任何限制。