正则表达式模式接受一个或多个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文件中使用此输入字段