正则表达式模式接受一个或多个ip地址?

时间:2016-03-02 10:18:08

标签: java regex

我在正则表达式下面使用

pattern="^(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))$|\s*

它将接受以下任何一个ip地址

1.1.2.3 or 192.122.134.1 or 198.23.45.56 

但我希望它应该接受单个以及ip地址,并使用逗号分隔,如下所示

1.1.2.3,192.122.134.1,198.23.45.56 

我在正则表达式中要做些什么改变?

5 个答案:

答案 0 :(得分:5)

慢慢变得难以理解,但在这里你是:

  

^(\ d | [1-9] \ d | 1 \ d \ d | 2([0-4] \ d | 5 [0-5]))(\ d |。[1-9] \ d | 1 \ d \ d | 2([0-4] \ d | 5 [0-5]))(\ d |。[1-9] \ d | 1 \ d \ d | 2([0 -4] \ d | 5 [0-5]))(\ d |。[1-9] \ d | 1 \ d \ d | 2([0-4] \ d | 5 [0-5]) )((\ d | [1-9] \ d | 1 \ d \ d | 2([0-4] \ d | 5 [0-5]))(\ d |。[1-9] \ d | 1 \ d \ d | 2([0-4] \ d | 5 [0-5]))(\ d |。[1-9] \ d | 1 \ d \ d | 2([O- 4] \ d | 5 [0-5]))(\ d |。[1-9] \ d | 1 \ d \ d | 2([0-4] \ d | 5 [0-5])) )* $

这里发生的是:

让我们打电话给您的IP正则表达式 IP

  

IP =((\ d | [1-9] \ d | 1 \ d \ d | 2([0-4] \ d | 5 [0-5]))。(\ d | [1- 9] \ d | 1 \ d \ d | 2([0-4] \ d | 5 [0-5]))(\ d |。[1-9] \ d | 1 \ d \ d | 2( [0-4] \ d | 5 [0-5]))(\ d |。[1-9] \ d | 1 \ d \ d | 2([0-4] \ d | 5 [0-5 ])))

所以我们只需要用逗号重复它:

  

^ IP(,IP)* $

答案 1 :(得分:0)

([1-9]\d?\d?(\.\d{1,3}){2}\.\d{1,3},?)+

或许还有一点点还原,但那应该处理它。 (你需要从比赛中删除逗号) 编辑以限制匹配范围为1. 。* - > 999 *

答案 2 :(得分:0)

我不想像@biziclop那样使用正则表达式。

您可以拆分整个String并将ip地址传递给InetAddress.html#getByName方法。从方法的文档:

  

如果提供了文字IP地址,则仅检查地址格式的有效性

基本上,您可以将地址传递给此方法,而类本身将提供地址验证。如果地址无效,你会遇到java.net.UnknownHostException你必须抓住的地方。这样你就必须创建一个能够成功拆分所有ip-adresses的正则表达式

public static void main(String[] args) throws UnknownHostException {
    String adresses = "1.1.2.3.15,192.122.134.1,198.23.45.56";
    for(String s : adresses.split(",|\\sor\\s")) {
        try {
            InetAddress adress = Inet4Address.getByName(s);
        } catch (UnknownHostException e) {
            System.out.println("Invalid format for ip adress " + s);
        }
    }
    adresses = "1.1.2.3 or 192.122.134.1 or 198.23.45.56 ";
    for(String s : adresses.split(",|\\sor\\s")) {
        try {
            InetAddress adress = Inet4Address.getByName(s);
        } catch (UnknownHostException e) {
            System.out.println("Invalid format for ip adress " + s);
        }
    }
}

输出:

Invalid format for ip adress 1.1.2.3.15

答案 3 :(得分:0)

这应该有效

^((2([0-4]\d|5[0-5])|1\d\d|[0]?[1-9]\d|[0]?[0]?\d)(\.(2([0-4]\d|5[0-5])|1\d\d|
[0]?[1-9]\d|[0]?[0]?\d)){3}([\s,](?!$)|$))*$

它将接受逗号分隔和空格分隔的ips

答案 4 :(得分:0)

<input type="text" name="country_code" pattern="^(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))(,(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])))*$">

在HTML文件中使用此输入字段