【发布时间】:2014-10-01 05:11:28
【问题描述】:
top voted answer 在此处验证 IP 地址(这是一个正则表达式,因此自动不利)如果你给它一个在单个八位字节中包含 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 库和所述正则表达式中存在错误,如果它无效,则 请提供证明它的链接。
【问题讨论】: