簡體   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