[英]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.