我有以下正则表达式:
^[-+]?[\d{0,3},?\d{3}]*\.?\d+$
我正在尝试支持以下格式的数字:
我并不关心科学记数法,但我的用户可能会或可能不会用逗号输入。我遇到的问题是表达式匹配:
如何让表达式表明如果有逗号,那么后面必须有三个字符。
答案 0 :(得分:6)
试试这个正则表达式:
/^[-+]?(?:\d*|\d{1,3}(?:,\d{3})*)(?:\.\d+)?$/
答案 1 :(得分:1)
试试这个
^([-+]?\d(?:(,\d{3})|(\d*))+\d*)?\.?\d*$
SUCCESSES
0
1
-1
-1.00
100,000
100.0
1,111,111
.25
FAILURES
100.0.
100.0,
asdf100.0
100,
1,11,111
,111,111
答案 2 :(得分:1)
正如Robert Harvey指出的那样,如果你所关心的只是捕获要在你的程序中使用的数值,你可以删除逗号,一切都会很好。
但是,假设这是一个格式化问题(也就是说,您正在检查击键并且只允许有效输入,或者将输入重新格式化为有效的数值),那么您可以尝试这样的事情:
编辑:^[+-]?\d{1,3}(,\d{3})*(\.\d+)?$
这样做是允许任意数量的逗号和3位数字,然后是零或一组点后跟一个或多个数字。
答案 3 :(得分:0)
你把你的“计数”限定符放在方括号内,这没有意义(从语法来讲,这是有道理的,但它没有做你认为它正在做的事情。)
答案 4 :(得分:0)
为什么不敲打所有逗号然后测试?
g=oldstring.replace(',','');
g=g.replace('.','');//may as well do dots too
if (! g.match('/^[0-9]*[0-9]$/'))
alert("Bummerific");
此外,如果你要允许使用逗号,那么你不应该让它们每隔3位数使用逗号。国际用户使用逗号分隔小数位。在这种情况下,如果你想要迂腐,那么这个正则表达式可能会起作用
/^[0-9][0-9,.]*[0-9]$/
祝你好运!