使用正则表达式测试数字输入

时间:2010-03-04 18:25:05

标签: javascript regex validation

我有以下正则表达式:

^[-+]?[\d{0,3},?\d{3}]*\.?\d+$

我正在尝试支持以下格式的数字:

  • 1
  • -1
  • -1.00
  • 100000

我并不关心科学记数法,但我的用户可能会或可能不会用逗号输入。我遇到的问题是表达式匹配:

  • 100
  • 100,00

如何让表达式表明如果有逗号,那么后面必须有三个字符。

5 个答案:

答案 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]$/

祝你好运!