("^\d{1,15}(\.\d{1,2})?$")
这是我正在尝试使用的正则表达式,但java给出了语法错误。
^(?!(?:0|0\.0|0\.00)$)[+]?\d+(\.\d|\.\d[0-9])?$
这个适用于00.00,124.03,0.13这样的数字但不适用于0.0和0。
请修改正则表达式,使其接受以下类型的数字:
123456.00,
12415366.88,
0.23,
0,
0.00,
0.0,
432547,
即。只有正数,包括零和小数后最多2位
答案 0 :(得分:1)
公共类RegexTest {
public static void main(String[] args) {
String regexExpression = "([0-9]+[.]?|[0-9]*[.][0-9]{0,2})";
// True examples
System.out.println("123456.00".matches(regexExpression));
System.out.println("12415366.88".matches(regexExpression));
System.out.println("0".matches(regexExpression));
System.out.println("0.0".matches(regexExpression));
System.out.println("0.00".matches(regexExpression));
System.out.println("432547".matches(regexExpression));
System.out.println("00.00".matches(regexExpression));
System.out.println("124.03".matches(regexExpression));
// False examples
System.out.println("124.033".matches(regexExpression));
System.out.println("-124.03".matches(regexExpression));
}
}
答案 1 :(得分:1)
你的第一个正则表达式是最好的,但请记住,在java中你必须使用 double 反斜杠来编写文字反斜杠,所以:
str.matches("\\d{1,15}(\\.\\d{1,2})?")
请注意,对于matches()
,您不需要前导^
或尾随$
,因为表达式必须匹配整个字符串才能返回true。
语法错误可能是因为\d
不是有效的转义序列,而\n
等是有效的。
答案 2 :(得分:0)
我不知道为什么正则表达式在这里。你可以这样试试
String num="253.65";
try{
double d=Double.parseDouble(num);
if(d==0.0){
System.out.println("valid");
}else if(d>0&&(num.split("\\.")[1].length()==2)){
System.out.println(num+" is valid");
}else{
System.out.println(num+" is invalid");
}
} catch (NumberFormatException e){
System.out.println(num+"is not a valid number");
}
直播Demo