我在正则表达式下面使用
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
我在正则表达式中要做些什么改变?
答案 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文件中使用此输入字段