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
m3eecexj1#
这将与您的数字匹配(?:\d+(?:,\d{3})*(?:\.\d{2})?|\.\d{2})它也将匹配.00只是以防万一。如果你不想,就把|\.\d{2}部分。根据需要添加您自己的边界构造^$或\b扩大
(?:\d+(?:,\d{3})*(?:\.\d{2})?|\.\d{2})
.00
|\.\d{2}
^$
\b
(?: \d+ (?: , \d{3} )* (?: \. \d{2} )? | \. \d{2} )
pxy2qtax2#
我的建议是:
^[1-9]((\d{0,2}(,\d{3})*(\.(\d{3},)*\d{1,3})?)|(\d*(\.\d+)?))$
一个数字要么每3位有分隔符,要么没有(没有中间形式)。它要么有一个小数点,后面至少有一个数字,要么没有。在所有情况下,它都以非零数字开头。请记住,点(句点,.)在正则表达式中具有特殊含义,因此需要进行转义以获得文字点。
.
ie3xauqp3#
这个解决方案也适用于点后的一个数字:
^\d{1,3}(,{1}\d{3})*(\.\d{1,2})?$
祝你好运
nsc4cvqm4#
你应该试试这个表达式:
^\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"); } } } }
输出:
ymzxtsji5#
这是您正在寻找的可能的正则表达式之一:
^\d{1,3}([ ,]?\d{3})*([.,]\d+)?$
演示:https://regex101.com/r/T8tcDP/1
5条答案
按热度按时间m3eecexj1#
这将与您的数字匹配
(?:\d+(?:,\d{3})*(?:\.\d{2})?|\.\d{2})
它也将匹配
.00
只是以防万一。如果你不想,就把|\.\d{2}
部分。根据需要添加您自己的边界构造
^$
或\b
扩大
pxy2qtax2#
我的建议是:
一个数字要么每3位有分隔符,要么没有(没有中间形式)。它要么有一个小数点,后面至少有一个数字,要么没有。在所有情况下,它都以非零数字开头。
请记住,点(句点,
.
)在正则表达式中具有特殊含义,因此需要进行转义以获得文字点。ie3xauqp3#
这个解决方案也适用于点后的一个数字:
祝你好运
nsc4cvqm4#
你应该试试这个表达式:
用这种表达方式涵盖了提出的各种情况。
这里是完整的例子:
输出:
ymzxtsji5#
这是您正在寻找的可能的正则表达式之一:
演示:https://regex101.com/r/T8tcDP/1