繁体   English   中英

小数点前 8 位数字和小数点后 2 位数字和整个字符串的正则表达式不应计算为零

[英]Regex expression for 8 digits before decimal and 2 after decimal and whole string should not compute to zero

我需要以下正则表达式:

  • 小数点前8位
  • 小数点后2位

\\d{0,8}(\\.\\d{1,2})?$

这适用于上述情况,但我不希望接受以下字符串。 该字符串不应导致为零。

  • 0000.00 -> 假
  • 00.00 -> 假
  • 0.0 -> 假

另一种选择是不仅断言点和零

^(?![0.]*$)\d{0,8}(?:\.\d{1,2})?$

正则表达式演示| Java 演示

在 Java 中

String regex = "^(?![0.]*$)\\d{0,8}(?:\\.\\d{1,2})?$";

如果您只想匹配,则可以省略捕获组并使其不捕获(?:

"(?=[1-9])(\\d{0,8}(\\.\\d{1,2})?)"

一个非零数字的前瞻就可以了。

由于这是 java 并且您正在使用正则表达式来验证模式

^\\d{0,8}(\\.\\d{1,2})?$

将得到一个最多带有两个可选小数的数字。

一旦你有了这个数字,你就可以将它解析为双精度值并检查它是否不等于 0。

String test = "100.00";
if (Pattern.compile("^\\d{0,8}(\\.\\d{1,2})?$").matcher(test).matches()) {
    double val = Double.parseDouble(test);
    if (val > 0) {
        // do something
    }
}

另一个选项是忘记正则表达式,解析它并检查它是否在您需要的范围内

final double maxVal = 99999999.99;
String test = "100.00";
try {
    double val = Double.parseDouble(test);
    if (val > 0 && val <= maxVal) {
        int decimalIndex = test.indexOf(".");
        if (decimalIndex >= 0) {
            if (test.length() - decimalIndex - 1 <= 2) {
                // do something, at most two deximals
            }
        } else {
            // do something, no decinals
        }
    }
} catch (NumberFormatException e) {
    // todo handle exception
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM