带或不带逗号正则表达式的十进制

时间:2012-10-25 15:03:11

标签: javascript jquery regex

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

我有 -

^[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 个答案:

答案 0 :(得分:5)

这个正则表达式似乎有用(试试here),但它略微过于复杂,同时允许,的不一致使用(即12345,789,000.123)。这应该可以解决这个问题:

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

通过使用反向引用(\1),您可以确保,始终使用,或永远不会。

.选项前面制作数字,同时仍需要,前面的数字也是可能的,但稍微复杂一些:

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:1)

^(?=[\d.])\d{0,3}(?:\d*|(?:,\d{3})*)(?:\.\d+)?$

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

进行更改:

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

享受!

答案 3 :(得分:0)

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

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

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

希望有所帮助。