你直接用matchs判断就可以了,matcher是只要内部有能匹配上的就算满足,不是判断整体。
String rexp = "([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"String addr = "11111.1.1.1"
System.out.println("1.1.1.1".matches(rexp))
System.out.println("11.1.1.1".matches(rexp))
System.out.println("111.1.1.1".matches(rexp))
System.out.println("11111.1.1.1".matches(rexp))
true
true
true
false
^(([1-9]{1}\d*)|(0{1}))(\.\d{2})$万楼主是要必须等于"8.20万"? 如果是这样根本不用正则,直接使用"8.20万".equls()方法就可以了.
如果楼主意思是校验8.20万这种整数后面带两位小数的字符串的话,使用上面的正则就可以了
目前仍没有人解决1、3、5、7、8、10、12月是31天的大月问题呀(我本是1楼)如果用正则去验证“数值”,会很舍近求远,不是正则的强项。需要写很多的“向后断言”。效率会一般甚至很低。(目前我看到的上下楼的都是有漏洞的,没法检验闰月和大小月)
我所不取。
我一直用的这个:
static public boolean isValidDate(
int year, int mon, int day,
short year_min,short year_max,
StringBuffer msg)
{
if(year<year_min || year>year_max)
{
msg.append("年份必须在("+
year_min+"~"+year_max+
")之间,输入值("+year+")无效\n")
return false
}else{//
switch(mon){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:{
if(day<1 || day>31){
msg.append("日号必须在(1~31)之间,输入值("+day+")无效\n")
return false
}
}break
case 2:{
if(isLeapYear(year) &&day>29){
msg.append("闰年的闰二月日号必须在(1~29)之间,"+year+"是闰年,输入值("+day+")无效\n")
return false }else if(day>28){
msg.append("非闰年的闰二月的日号必须在(1~28)之间,"+year+"不是闰年,输入值("+day+")无效\n")
return false
}
}break
case 4:case 6:case 9:case 11:{
if(day<1 || day>30){
msg.append("日号必须在(1~30)之间,输入值("+day+")无效\n")
return false
}
}break
default:{
msg.append("月份必须在(1~12)之间,输入值("+mon+")无效\n")
return false
}
}
}
return true
}
static public boolean isLeapYear(int year){
return (year%4==0 &&year%100!=0)|| year%400==0
}
包好。