0

我正在尝试编写一个允许带或不带逗号的小数的正则表达式。

我有 -

^[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 等。

4

4 回答 4

5

这个正则表达式似乎可以工作(在这里试试),但它有点过于复杂,同时允许不一致的使用,(即 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})?$
于 2012-10-25T15:09:34.980 回答
3

这是允许格式正确的数字的另一个选项,最多 10 位小数:

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

如果您想允许.123没有整数(小数的左侧),您可以将第一个更改{1,3}{0,3}

于 2012-10-25T15:13:16.037 回答
1
^(?=[\d.])\d{0,3}(?:\d*|(?:,\d{3})*)(?:\.\d+)?$

这强制使用一致的逗号,允许没有左侧,并且不会匹配空字符串,确保用户在您的表单中输入了某种数字。

要进行更改:

  • 消除开头的 Lookahead 以允许空字符串
  • 更改{0,3}{1,3}需要 LHS
  • 将最终更改为+{1,N}最大精度。
  • 要设置最大值,请更改(或添加,以保持不匹配空字符串。)开头的前瞻:
  • (?=(?:,?\d){0,N})其中 N 是最大位数。
  • 要设置最小值,请将开始前瞻更改为:
  • (?=(?:,?\d){M})其中 M 是最小位数。
  • 将它们组合为最小/最大。

享受!

于 2012-10-26T00:04:27.997 回答
0

以下正则表达式对我有用:

^[0-9]{1,3}(,[0-9]{3})*(\\.[0-9]+)?$

我在 W3Schools 网页上使用此页面进行了测试:http ://www.w3schools.com/js/tryit.asp?filename=tryjs_regexp_test 。它接受最多三位数字,后跟逗号的任意序列,后跟 3 位数字,并以可选的点结尾,至少一个数字后跟任意数量的数字。

希望有帮助。

于 2013-01-23T13:41:19.050 回答