本文实例讲述了java正则验证ip的方法。分享给大家供大家参考,具体如下:
网上用正则验证ip的表达式有很多,一搜一大堆,可以自己写,但很麻烦又费事,用别人写的难免有bug。
找了几个测试一下,不是有bug,就是连正确的ip也不认识了,好多还信誓旦旦,仿佛自己做过测试似的。
今天找到一个比较行的通的表达式,不过也有一个小的bug(用*号时,不报错)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
package des;
import java.util.regex.matcher;
import java.util.regex.pattern;
public class ip {
/**
* @param args
*/
public static void main(string[] args) {
// todo auto-generated method stub
ip p= new ip();
string ii= "127.0.0.1" ;
string ii2= "127.0.0." ;
string ii3= "127.0.0.1000" ;
string ii4= "256.0.0.1" ;
string ii5= "127.0.0.gg" ;
string ii6= "127.h.0.1" ;
string ii7= "127.555.0.1" ;
string ii8= "127.00.0.1" ;
string ii9= "127.0.04.1" ;
string ii10= "127.100.#.1" ;
string ii11= "127.*.0.1" ;
string ii12= "127.0.0.000" ;
string ii13= "192.168.3.12" ;
system.out.println( "来自 www.zzvips.com 的测试结果:" );
p.ismatches(ii);
p.ismatches(ii2);
p.ismatches(ii3);
p.ismatches(ii4);
p.ismatches(ii5);
p.ismatches(ii6);
p.ismatches(ii7);
p.ismatches(ii8);
p.ismatches(ii9);
p.ismatches(ii10);
p.ismatches(ii11);
p.ismatches(ii12);
p.ismatches(ii13);
}
public boolean ismatches(string ip){
boolean flag= false ;
try {
// string regex="[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+";
string regex= "^((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]|[*])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]|[*])$" ;
//正确的是
//string regex="^((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]|[*])$";
// string regex="\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b";
pattern p=pattern.compile(regex);
matcher m=p.matcher(ip);
if (m.find()){
system.out.println( "successss" );
return true ;
} else {
system.out.println( "falsss" );
}
} catch (exception e){
e.printstacktrace();
}
return flag;
}
}
|
运行结果如下图:
可见倒数第3个带有*的是错的,但还是输出成功了
将正则改成:
1
|
string regex= "^((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]|[*])$" ;
|
测试结果如下:
至此完全正确!
希望本文所述对大家java程序设计有所帮助。
原文链接:http://blog.csdn.net/lushuaiyin/article/details/6863135