本文实例讲述了java正则验证ip的方法。分享给大家供大家参考,具体如下:
网上用正则验证ip的表达式有很多,一搜一大堆,可以自己写,但很麻烦又费事,用别人写的难免有bug。
找了几个测试一下,不是有bug,就是连正确的ip也不认识了,好多还信誓旦旦,仿佛自己做过测试似的。
今天找到一个比较行的通的表达式,不过也有一个小的bug(用*号时,不报错)
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.jb51.net 的测试结果:");
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个带有*的是错的,但还是输出成功了
将正则改成:
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]|[*])$";
测试结果如下:
至此完全正确!
ps:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
javascript正则表达式在线测试工具:
正则表达式在线生成工具:
希望本文所述对大家java程序设计有所帮助。
希望与广大网友互动??
点此进行留言吧!