【问题标题】:CIDR notation and IP range validator patternCIDR 表示法和 IP 范围验证器模式
【发布时间】:2013-09-07 15:00:49
【问题描述】:

我有一个验证普通 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吗?前几个结果就是您想要的。
  • 我已经尝试过了,但我无法将我的正则表达式用于正常的 IP 地址检查与 CIDR 和没有主机名的 IP。
  • 你看起来不是很努力。 first result 上的第二个正则表达式用于 IPv4 CIDR 范围(例如 192.168.1.20/24)。考虑尝试理解正则表达式,而不是从任何地方复制/粘贴它们。

标签: java regex ip cidr


【解决方案1】:
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 范围,您应该删除最后一个问号

【讨论】:

    猜你喜欢
    • 2015-11-08
    • 2023-04-05
    • 2011-07-20
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    相关资源
    最近更新 更多