Java 接受一个或多个ip地址的正则表达式模式?
我正在使用下面的正则表达式模式Java 接受一个或多个ip地址的正则表达式模式?,java,regex,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 但我希望它应该接受
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地址以及逗号分隔的ip地址,以及如下所示
1.1.2.3,192.122.134.1,198.23.45.56
我必须对正则表达式进行哪些更改
([1-9]\d?\d?(\.\d{1,3}){2}\.\d{1,3},?)+
也许有点过分简化,但这应该能解决问题。
(不过,您需要从匹配项中删除逗号)
编辑以将匹配限制在1…*->999*
也许有点过分简化,但这应该能解决问题。
(不过,您需要从匹配项中删除逗号)
编辑以将匹配限制在1…*->999…*的范围内,我不想像@biziclop所说的那样使用正则表达式 您可以拆分整个
字符串
,并将ip地址传递给该方法。从方法的文档中:
如果提供了文字IP地址,则只检查地址格式的有效性
基本上,您可以将地址传递给这个方法,而类本身将提供地址的验证。如果地址无效,您将遇到一个java.net.UnknownHostException
,您必须捕获它。这样,您只需创建一个正则表达式,它将成功地拆分所有ip地址
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
我不想像@biziclop所说的那样使用正则表达式 您可以拆分整个
字符串
,并将ip地址传递给该方法。从方法的文档中:
如果提供了文字IP地址,则只检查地址格式的有效性
基本上,您可以将地址传递给这个方法,而类本身将提供地址的验证。如果地址无效,您将遇到一个java.net.UnknownHostException
,您必须捕获它。这样,您只需创建一个正则表达式,它将成功地拆分所有ip地址
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-4)第5[0-5]5[0-5]5[0-5]))。((3-d[1-9]d[1-9]d[1-9]d[1-9]第1-9[1-9]d[1-9]d[1-9]第四个州(1-9]d[1-9.[1-9.[1-9]d[1-9]d[1-9]第1-9]d[1-9]d[1-9]1-9]第三个州(1-5[1-5[1-5[1-9]第三个州(1-5[1-5[1-5[0-5[0-5[0-5[0-5[0-5[0-5]))))))))))))((((((((((3[0-4[1-4[1-4[1-4[1-9]d[1|[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|d|5[0-5])。)*$ 这里发生的是: 让我们调用您的IP regexpIP: 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|d|1\d\d|2([0-4]\d|5[0-5])。) 所以我们只需要用逗号重复一下: ^IP(,IP)*$
慢慢地,它变得难以理解,但你在这里: ^(1-4)第5[0-5]5[0-5]5[0-5]))。((3-d[1-9]d[1-9]d[1-9]d[1-9]第1-9[1-9]d[1-9]d[1-9]第四个州(1-9]d[1-9.[1-9.[1-9]d[1-9]d[1-9]第1-9]d[1-9]d[1-9]1-9]第三个州(1-5[1-5[1-5[1-9]第三个州(1-5[1-5[1-5[0-5[0-5[0-5[0-5[0-5[0-5]))))))))))))((((((((((3[0-4[1-4[1-4[1-4[1-9]d[1|[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|d|5[0-5])。)*$ 这里发生的是: 让我们调用您的IP regexpIP: 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|d|1\d\d|2([0-4]\d|5[0-5])。) 所以我们只需要用逗号重复一下: ^IP(,IP)*$ 这应该行得通
^((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,](?!$)|$))*$
它将接受逗号分隔的IP和空格分隔的IP
^((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,](?!$)|$))*$
<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])))*$">
它将接受逗号分隔和空格分隔的IP
<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文件中使用此输入字段
在HTML文件中使用此输入字段我的建议是完全删除它并正确解析它们。从长远来看,你的生活会轻松得多。也许你可以在逗号上拆分字符串,然后在标记上应用正则表达式。我同意biziclop和Berger的观点。至少:不要重新发明轮子。使用您最喜欢的搜索引擎,查看非常复杂的正则表达式,您实际上需要这些正则表达式来支持构成有效IP地址的各种奇怪内容。@biziclop我从web应用程序表单中获取的输入,如果没有正则表达式,将很难找到它validate@SubodhJoshi相反,它要简单得多。将字符串沿
,
字符拆分,就得到了各个IP地址。您将它们沿
拆分,并将零件转换为数字,检查它们是否为您提供了有效的IP,您就完成了。作为奖励,您还可以排除有效但可能不需要的IP,如127.0.0.1
。我的建议是完全摆脱它并正确解析它们。从长远来看,你的生活会轻松得多。也许你可以在逗号上拆分字符串,然后在标记上应用正则表达式。我同意biziclop和Berger的观点。至少:不要重新发明轮子。使用您最喜欢的搜索引擎,查看非常复杂的正则表达式,您实际上需要这些正则表达式来支持构成有效IP地址的各种奇怪内容。@biziclop我从web应用程序表单中获取的输入,如果没有正则表达式,将很难找到它validate@SubodhJoshi相反,它要简单得多。将字符串沿,
字符拆分,就得到了各个IP地址。您将它们沿
拆分,并将零件转换为数字,检查它们是否为您提供了有效的IP,您就完成了。作为奖励,您还可以排除有效但可能不需要的IP,如127.0.0.1
。您的意思是,0.999.5437891.3.2.500
是一个有效的IP地址列表?它不应该与该模式匹配(现在通过regex101.com运行-它不匹配),但我同意0的问题,我现在就更新。@Minotor请检查这个值12.12.1.1,
它没有告诉你这个数字有什么问题。我明白你的意思了,它可能有点过分简化了,我会进一步细化它,但我认为我无法将它细化到0.0.0.0之外