在 Java 中验证 IPv4 字符串

2022-08-31 17:42:51

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;
    }
}

答案 1

这是一种更易于阅读,效率稍低的方式,您可以进行。

public static boolean validIP (String ip) {
    try {
        if ( ip == null || ip.isEmpty() ) {
            return false;
        }

        String[] parts = ip.split( "\\." );
        if ( parts.length != 4 ) {
            return false;
        }

        for ( String s : parts ) {
            int i = Integer.parseInt( s );
            if ( (i < 0) || (i > 255) ) {
                return false;
            }
        }
        if ( ip.endsWith(".") ) {
            return false;
        }

        return true;
    } catch (NumberFormatException nfe) {
        return false;
    }
}

答案 2

更新:Commons-HttpClient及其继任者HttpComponents-HttpClient已经采用了此功能。您可以像这样使用它的此版本:.InetAddressUtils.isIPv4Address(Str)


Apache Commons Validator的开发版本有一个InetAddressValidator类,它有一个isValidInet4Address(String)方法来执行检查,以查看给定的IPv4地址。String

可以从存储库中查看源代码,因此,如果您觉得有任何改进的想法,这可能会提供一些改进的想法。

快速浏览一下提供的代码,就会发现您的方法在每次调用该方法时都会编译 。我会将该类移到一个字段中,以避免每次调用时昂贵的模式编译过程。PatternPatternstatic