网络上常见的代码如下:
static boolean isIpAddress(String s){
String regex = "(((2[0-4]//d)|(25[0-5]))|(1//d{2})|([1-9]//d)|(//d)).(((2[0-4]//d)|(25[0-5]))|(1//d{2})|([1-9]//d)|(//d))
.(((2[0-4]//d)|(25[0-5]))|(1//d{2})|([1-9]//d)|(//d)).(((2[0-4]//d)|(25[0-5]))|(1//d{2})|([1-9]//d)|(//d))";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
return m.matches();
}
经过测试,发现像“1.1.112”这样不合法的IP也可以通过校验
对0~255的校验“((2[0-4]//d)|(25[0-5]))|(1//d{2})|([1-9]//d)|(//d)”,这段代码应该没问题了,问题就出在对“.”的处理上,于是,改成如下:
static boolean isIpAddress(String s){
String regex = "(((2[0-4]//d)|(25[0-5]))|(1//d{2})|([1-9]//d)|(//d))[.](((2[0-4]//d)|(25[0-5]))|(1//d{2})|([1-9]//d)|(//d))
[.](((2[0-4]//d)|(25[0-5]))|(1//d{2})|([1-9]//d)|(//d))[.](((2[0-4]//d)|(25[0-5]))|(1//d{2})|([1-9]//d)|(//d))";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
return m.matches();
}
成功!!!