【发布时间】:2011-06-02 16:26:21
【问题描述】:
Bellow 方法正在验证字符串是否正确 IPv4 地址,如果有效则返回 true。非常感谢正则表达式和优雅的任何改进:
public static boolean validIP(String ip) {
if (ip == null || ip.isEmpty()) return false;
ip = ip.trim();
if ((ip.length() < 6) & (ip.length() > 15)) return false;
try {
Pattern pattern = Pattern.compile("^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$");
Matcher matcher = pattern.matcher(ip);
return matcher.matches();
} catch (PatternSyntaxException ex) {
return false;
}
}
【问题讨论】:
-
可能有不同的表示形式。您正在寻找点十进制表示法:请参阅 en.wikipedia.org/wiki/IPv4#Address_representations
-
7 的 ip.length() 有效,例如 0.0.0.0 是 7 个字符,您的方法将返回 false。
-
我想知道为什么这仍然不是某些第三方库的一部分。我的意思是避免使用第三方库是好的,但为此计算正则表达式非常容易出错,我认为这比使用第三方 API 更糟糕。
-
正则表达式很好,您只需将
[0-9]替换为\d并在方法之外进行Pattern 编译,这样您就不必每次都编译它。
标签: java string validation ip