Java正则表达式检查字符串是否是有效的数字格式(逗号和小数点放置)

ibps3vxo  于 2023-10-14  发布在  Java
关注(0)|答案(5)|浏览(120)
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

m3eecexj

m3eecexj1#

这将与您的数字匹配(?:\d+(?:,\d{3})*(?:\.\d{2})?|\.\d{2})
它也将匹配.00只是以防万一。如果你不想,就把
|\.\d{2}部分。
根据需要添加您自己的边界构造^$\b
扩大

(?:
      \d+ 
      (?: , \d{3} )*
      (?: \. \d{2} )?
   |  \. \d{2} 
 )
pxy2qtax

pxy2qtax2#

我的建议是:

^[1-9]((\d{0,2}(,\d{3})*(\.(\d{3},)*\d{1,3})?)|(\d*(\.\d+)?))$

一个数字要么每3位有分隔符,要么没有(没有中间形式)。它要么有一个小数点,后面至少有一个数字,要么没有。在所有情况下,它都以非零数字开头。
请记住,点(句点,.)在正则表达式中具有特殊含义,因此需要进行转义以获得文字点。

ie3xauqp

ie3xauqp3#

这个解决方案也适用于点后的一个数字:

^\d{1,3}(,{1}\d{3})*(\.\d{1,2})?$
  • 100.1 -有效
  • 1.11 -有效
  • 1,000123,123.1-无效

祝你好运

nsc4cvqm

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");
            }
        }
    }

}

输出:

  • 1000有效
  • 1,000-有效
  • 1,000.00-有效
  • 1000.00有效
  • 1000.00.00 -无效
  • 1,0.00-无效
  • 1,000,00.00-无效
  • 1,000,000.12-有效
ymzxtsji

ymzxtsji5#

这是您正在寻找的可能的正则表达式之一:

^\d{1,3}([ ,]?\d{3})*([.,]\d+)?$

演示:https://regex101.com/r/T8tcDP/1

相关问题