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

我正在使用正则表达式模式下面

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 

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

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

^(\ 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])))* $

这里发生的是:

让我们调用您的IP regexp 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([O- 4] \ d | 5 [0-5]))(\ d |。[1-9] \ d | 1 \ d \ d | 2([0-4] \ d | 5 [0-5])) )

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

^ IP(IP)中* $

我宁愿不要像@biziclop那样使用正则表达式。

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

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

基本上你可以将地址传递给这个方法,并且类本身将提供地址的validation。 如果地址无效,你会遇到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 
 ([1-9]\d?\d?(\.\d{1,3}){2}\.\d{1,3},?)+ 

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

这应该工作

 ^((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

  

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