[英]Regex expression for 8 digits before decimal and 2 after decimal and whole string should not compute to zero
我需要以下正則表達式:
\\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.