1000 - valid
1,000 - valid
1,000.00 - valid
1000.00 - valid
1000.00.00 - invalid
1,0.00 - invalid
1,000,00.00 - invalid
1,000,000.12 - valid
小数位数不能无限制
我一直在努力寻找合适的正则表达式模式,似乎找不到能够容纳所有验证的模式。任何人都可以帮忙
模式^ [1-9] \ d {0,2}(。\ d {3})*(,\ d +)?$对我来说不起作用,基于类似的线程here
答案 0 :(得分:2)
你应该尝试这个表达式:
^\d{1,3}|\d(([ ,]?\d{3})*([.,]\d{2}+)?$)
使用此表达式涵盖了所引发的方案。
这里有完整的示例:
public class Decimal {
private static String REGEX = "^\\d{1,3}|\\d(([ ,]?\\d{3})*([.,]\\d{2}+)?$)";
public static void main(String[] args) {
String data[] = {"1000", "1,000", "1,000.00", "1000.00", "1000.00.00", "1,0.00", "1,000,00.00", "1,000,000.12"};
Pattern.compile(REGEX);
for (int i = 0; i < data.length; i++) {
if (data[i].matches(REGEX)) {
System.out.println(data[i] + " - valid");
} else {
System.out.println(data[i] + " - invalid");
}
}
}
}
输出:
答案 1 :(得分:1)
答案 2 :(得分:0)
这会匹配您(?:\d+(?:,\d{3})*(?:\.\d{2})?|\.\d{2})
的数字
它也会匹配.00
。如果你不想要它,只需删除
|\.\d{2}
部分。
根据需要添加您自己的边界构造^$
或\b
扩展
(?:
\d+
(?: , \d{3} )*
(?: \. \d{2} )?
| \. \d{2}
)
答案 3 :(得分:0)
我的建议是:
^[1-9]((\d{0,2}(,\d{3})*(\.(\d{3},)*\d{1,3})?)|(\d*(\.\d+)?))$
一个数字要么每3个数字都有分隔符,要么没有(没有中间形式)。它有一个小数点,后面至少有一个数字,或者它没有。在所有情况下,它都以非零数字开头。
请记住,点(句点.
)在正则表达式中具有特殊含义,因此需要进行转义以获得字面值。