我正在尝试编写一个允许使用或不使用逗号的小数的正则表达式。
我有 -
^[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 :(得分: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+)?$
这会强制使用一致的逗号,允许没有左侧,并且不匹配空字符串,确保用户在表单中输入了某种数字。
进行更改:
{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个数字,最后是一个可选的点,至少有一个数字后跟任意数字的数字。
希望有所帮助。