我需要你的帮助,因为我有一个正则表达式来验证正在接收的浮点类型,这是因为小数分隔符可以作为 .
或 ,
I 到达没有办法强制使用单一类型的分隔符,所以我想通过正则表达式来验证它,但我无法完成它,我尝试了多种方法,但我没有设法获得预期的结果,请指导我。
数字:
171
、171.00
、1770
、1,700
、1,700.00
、1,777,777
, 1,777,777.00
,,1777777.00
常规短语
- 选项:
字符串patternString = "^[0-9]{0,3}+|(\\,[0-9]{0,3})+(\\.[0-9] {0,2})?$
- 选项:
字符串patternString = "^[0-9]{0,3}|(\\,[0-9]{0,3})(\\.[0-9]{0 ,2})?$";
- 选项:
字符串patternString = "^[0-9]+(\\,[0-9]{0,})+(\\.[0-9]{0,})?$ | ^[0-9]+(\\,[0-9]{0,})?$";
- 选项:
字符串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
- 错误(False)1,777,777
- 错误(False)1,777,777.00
- 错误(假)1777777,00
- 错误(False)1,00
- 错误(假)
最佳答案
在您的示例数字中,您以 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
关于java - 正则表达式小数(动态)Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54819816/