java中验证正数(包括零和小数点后2位)的正则表达式?

java中验证正数(包括零和小数点后2位)的正则表达式?,java,regex,Java,Regex,这是我试图使用的正则表达式,但java给出了语法错误 ("^\d{1,15}(\.\d{1,2})?$") 这一项适用于00.00、124.03、0.13等数字,但不适用于0.0和0 请修改正则表达式,使其接受以下类型的数字: ^(?!(?:0|0\.0|0\.00)$)[+]?\d+(\.\d|\.\d[0-9])?$ i、 e.只有包含零和小数点后最多2位的正数,我不知道为什么这里有正则表达式。你可以这样试试 123456.00, 12415366.88, 0.23, 0, 0.00,

这是我试图使用的正则表达式,但java给出了语法错误

("^\d{1,15}(\.\d{1,2})?$") 
这一项适用于00.00、124.03、0.13等数字,但不适用于0.0和0

请修改正则表达式,使其接受以下类型的数字:

^(?!(?:0|0\.0|0\.00)$)[+]?\d+(\.\d|\.\d[0-9])?$

i、 e.只有包含零和小数点后最多2位的正数,我不知道为什么这里有正则表达式。你可以这样试试

123456.00,
12415366.88,
0.23,
0,
0.00,
0.0,
432547,

直播

公共类RegexTest{

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

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

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));
}
请注意,对于
matches()
,不需要前导的
^
或尾随的
$
,因为表达式必须匹配整个字符串才能返回true


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

问题可能重复,除非您必须对0进行一些修改。可以通过将
\d
中的反斜杠正确转义为
\\d
来修复第一个示例中的编译错误。第二个正则表达式专门排除了
0
0.0
0.00
。在这里提问之前,您应该尝试理解您的代码。为什么需要使用regex?如果它不是double的有效字符串表示形式,则会引发异常。此时,regex提供了一个更清晰、更紧凑的解决方案。匹配
1。
,匹配
.2
,匹配
也匹配!:)
str.matches("\\d{1,15}(\\.\\d{1,2})?")