我编写了一个接受 0 到 999,999,999,999.99 之间数字的正则表达式。逗号是可选的,但是,仍然应该接受不高于 999999999999.99 的值。我写了一篇,但是它有两个缺陷。
(^[1-9][0-9,]{0,14}(\.[0-9]{1,2})?$)
- 接受零。因此,0, 0.00 有效,但 00 或 00.00 无效。
- 不接受高于 999,999,999,999.99 且不带逗号的值。
我怎样才能做到这一点?我正在使用 regex101.com pcre(php) 对其进行测试。
答案1
测试文件内容:
start cmd:> cat file
999,999,999,999.99
999999999999.99
9,999,999,999,999.99
9999999999999.99
0
0.00
00
00.00
grep -E '^(0|0\.[0-9]{1,2}|'\
'[1-9][0-9]{0,2}(,?[0-9][0-9][0-9]){0,3}(\.[0-9]{1,2})?|'\
'[1-9][0-9]{0,2}(,[0-9][0-9][0-9])*(\.[0-9]{1,2})?)$' file
999,999,999,999.99
999999999999.99
9,999,999,999,999.99
0
0.00
答案2
基于正则表达式验证数字范围是一个坏主意,但如果您仍然坚持使用低于正则表达式的值。如果数字中有逗号,则不匹配。您可以在执行此正则表达式匹配之前删除逗号。
^(:?(?=[1])(10{0,11})|(?=[^0])(\d{1,12})|0)\.[0-9]{1,2}$
您可以在以下位置查看正则表达式101。