用于验证正数的正则表达式,包括零和小数点后的2位在java中?

时间:2013-08-23 04:54:57

标签: java regex

("^\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位

3 个答案:

答案 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

相关问题