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

4

我有一个用于验证常规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)添加验证,我尝试了许多不同的模式,但没有得到什么具体的东西。有什么建议吗?


你试过Google吗?前几个结果就是你想要的。 - Jonathon Reinhart
我已经尝试过了,但是我无法将正则表达式用于普通IP地址检查、CIDR和没有主机名的IP的组合。 - Maverick
2
你似乎没有认真看。第一个结果中的第二个正则表达式是用于IPv4 CIDR范围(例如192.168.1.20/24)。请尝试理解这些正则表达式,而不仅仅是从任何地方复制/粘贴它们。 - Jonathon Reinhart
1个回答

9
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 范围,如果您只想匹配范围,您应该删除最后的问号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接