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

时间:2017-03-15 23:27:21

标签: java regex validation

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

4 个答案:

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

}

输出:

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

答案 1 :(得分:1)

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

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

演示:https://regex101.com/r/T8tcDP/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个数字都有分隔符,要么没有(没有中间形式)。它有一个小数点,后面至少有一个数字,或者它没有。在所有情况下,它都以非零数字开头。

请记住,点(句点.)在正则表达式中具有特殊含义,因此需要进行转义以获得字面值。