如何使我的正则表达式接受输入中的零?

如何使我的正则表达式接受输入中的零?

我编写了一个接受 0 到 999,999,999,999.99 之间数字的正则表达式。逗号是可选的,但是,仍然应该接受不高于 999999999999.99 的值。我写了一篇,但是它有两个缺陷。

(^[1-9][0-9,]{0,14}(\.[0-9]{1,2})?$)
  1. 接受零。因此,0, 0.00 有效,但 00 或 00.00 无效。
  2. 不接受高于 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

相关内容