CIDR表示法和IP范围验证器模式

时间:2013-09-04 07:45:49

标签: java regex ip cidr

我有一种模式来验证正常的IP地址,即:

private static final String PATTERN =
            "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
                    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
                    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
                    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";

用于检查输入是否为有效IP地址的验证方法:

private static boolean validate(final String ip){

        Pattern pattern = Pattern.compile(PATTERN);
        Matcher matcher = pattern.matcher(ip);
        return matcher.matches();
    }

但是,现在我需要为CIDR(例如84.240.40.0/24)表示法和没有主机的IP范围添加验证(例如172.24.105),我尝试了许多不同的模式但没有得到具体的东西。有什么建议吗?

1 个答案:

答案 0 :(得分:6)

Pattern pattern = Pattern.compile("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(\\d|[1-2]\\d|3[0-2]))?$");
Matcher matcher = pattern.matcher("84.240.40.0/24");
if (matcher.find()) {
    System.out.println(matcher.group());
}

输出:

84.240.40.0/24

此模式匹配IPv4地址和IPv4 CIDR范围如果您只想匹配范围,则应删除最后一个问号