我正在尝试编写一个允许带或不带逗号的小数的正则表达式。
我有 -
^[0-9]*((,\d{3})?(,\d{3})?(,\d{3})?)*(\.[0-9]{1,10})?$
这似乎在 reg ex tester 中工作,但是当我把它放在我的代码中时它不起作用。如果失败 1,000.00,但不是 1,000
我需要它来接受 1, 1000, 1000.00, 1,000,000.123, 1223.456, 1,000,123.928 等。
我正在尝试编写一个允许带或不带逗号的小数的正则表达式。
我有 -
^[0-9]*((,\d{3})?(,\d{3})?(,\d{3})?)*(\.[0-9]{1,10})?$
这似乎在 reg ex tester 中工作,但是当我把它放在我的代码中时它不起作用。如果失败 1,000.00,但不是 1,000
我需要它来接受 1, 1000, 1000.00, 1,000,000.123, 1223.456, 1,000,123.928 等。
这个正则表达式似乎可以工作(在这里试试),但它有点过于复杂,同时允许不一致的使用,
(即 12345,789,000.123)。这应该可以解决这个问题:
^\d{1,3}(?:(,?)\d{3}(?:\1\d{3})*)?(?:\.\d{1,10})?$
通过使用反向引用 ( \1
),您可以确保,
始终使用或从不使用。
也可以在可选项前面添加数字,.
同时在 a 前面仍然需要它们,
,但稍微复杂一些:
^(?:\d{1,3}(?:(,?)\d{3})?)?(?:\1\d{3})*(\.\d{1,10})?$
这是允许格式正确的数字的另一个选项,最多 10 位小数:
^\d{1,3}((?:\,\d{3})*|\d*)(\.\d{1,10})?$
如果您想允许.123
没有整数(小数的左侧),您可以将第一个更改{1,3}
为{0,3}
^(?=[\d.])\d{0,3}(?:\d*|(?:,\d{3})*)(?:\.\d+)?$
这强制使用一致的逗号,允许没有左侧,并且不会匹配空字符串,确保用户在您的表单中输入了某种数字。
要进行更改:
{0,3}
为{1,3}
需要 LHS+
以{1,N}
最大精度。(?=(?:,?\d){0,N})
其中 N 是最大位数。(?=(?:,?\d){M})
其中 M 是最小位数。享受!
以下正则表达式对我有用:
^[0-9]{1,3}(,[0-9]{3})*(\\.[0-9]+)?$
我在 W3Schools 网页上使用此页面进行了测试:http ://www.w3schools.com/js/tryit.asp?filename=tryjs_regexp_test 。它接受最多三位数字,后跟逗号的任意序列,后跟 3 位数字,并以可选的点结尾,至少一个数字后跟任意数量的数字。
希望有帮助。