正则表达式小数(动态)Java

时间:2019-02-22 03:51:33

标签: java regex decimal

我需要您的帮助,因为我有一个正则表达式来验证所接收的浮点类型,这是因为小数点分隔符可能以.,的形式到达强制使用一种类型的分隔符,以至于我想通过regex对其进行验证,但我无法完成它,我已经尝试了几种方法,但是我没有设法获得预期的结果,您可以请引导我。

数字: 171171.0017701,7001,700.001,777,7771,777,777.001777777.00

常规词组

  1. 选项:String patternString = "^[0-9]{0,3}+|(\\,[0-9]{0,3})+(\\.[0-9]{0,2})?$
  2. 选项:String patternString = "^[0-9]{0,3}|(\\,[0-9]{0,3})(\\.[0-9]{0,2})?$";
  3. 选项:String patternString = "^[0-9]+(\\,[0-9]{0,})+(\\.[0-9]{0,})?$ | ^[0-9]+(\\,[0-9]{0,})?$";
  4. 选项:String patternString = "^[0-9]+(\\.[0-9]{0,})+(\\,[0-9]{0,})?$";

预期结果:

在这种情况下,我仅评估数字的模式为#, ## 0.00的位置,在其他情况下,我认为仅将,投资于.

选项1:

  • 1.71-好的
  • 1.71717171-好的
  • 171-好的
  • 171.00-好的
  • 1770-好的
  • 1,700-好的
  • 1,700.00-好的
  • 1,777,777-好的
  • 1,777,777.00-好的
  • 1777777.00-好的

选项2:

  • 171,00-错误(假)
  • 1,700.00-错误(假)
  • 1,777,777-错误(假)
  • 1,777,777.00-错误(假)
  • 1777777,00-错误(假)
  • 1,00-错误(假)

1 个答案:

答案 0 :(得分:1)

在示例数字中,您以数字1+开头。接下来是一个可选的重复部分,该部分匹配一个逗号和一个3位数,数字以一个可选的点和2位数或一个点后跟1+位数结尾。

您可以使用和alternation

^\d+(?:(?:,\d{3})*(?:\.\d{1,2})?|\.\d+)$

在Java中:

String regex = "^\\d+(?:(?:,\\d{3})*(?:\\.\\d{1,2})?|\\.\\d+)$";

说明

  • ^字符串的开头
  • \d+匹配1个以上的数字
  • (?:非捕获组
    • (?:,\d{3})*重复0+次匹配逗号和3位数字
    • (?:\.\d{1,2})?可以选择匹配一个点和一个2位数字
  • |
  • \.\d+匹配点和1个以上的数字
  • )关闭非捕获组
  • $字符串的结尾

请参见regex demo