-1
("^\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位的正数

4

3 回答 3

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));
}

}

于 2013-08-23T05:12:35.277 回答
1

您的第一个正则表达式是最好的,但请记住,在 java 中您必须使用反斜杠来编码文字反斜杠,因此:

str.matches("\\d{1,15}(\\.\\d{1,2})?") 

请注意,使用matches(),您不需要前导^或尾随$,因为表达式必须匹配整个字符串才能返回 true。

语法错误可能是因为\d不是有效的转义序列,而\netc 是有效的。

于 2013-08-23T05:19:34.930 回答
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");
    }

现场演示

于 2013-08-23T05:03:21.980 回答