我怎样才能简单地使用这个数字格式验证正则表达式?

时间:2012-11-09 11:01:48

标签: javascript regex regex-negation

所以,我有这个if语句:
if (String(val).search(/^((\d+(((\,\d{3,})+)?)(\.\d+)?)|(\.\d+))$/) !== -1)

其中说(据我所知):
该字符串必须以至少一个数字或.开头 如果字符串以数字开头,则字符串中可以选择使用逗号,只要逗号后跟至少三位数即可。 如果字符串中包含.,则必须后跟至少一位数字 只能有一个.

所以,字符串如:

5
5.00
5000
5000个
5000.00
5,000.00

将全部归还

但是包含0-9 , .以外的任何字符串或格式错误的字符串将返回false。 所以像这样的字符串:

5,00
5,00.00
5.00.00
a5

现在,上述工作,但我想知道是否有任何方法来简化它?

2 个答案:

答案 0 :(得分:3)

您可以删除一些冗余的括号:

^(\d+((\,\d{3,})+)?(\.\d+)?|\.\d+)$

(( ... )+)?之类的内容可以替换为:( ... )*,因此最终的正则表达式可能如下所示:

^(\d+(\,\d{3,})*(\.\d+)?|\.\d+)$

如果你想拒绝像:

这样的输入
50000,000,000.0

并且仅允许:

5,000,000.0
50,000,000.0
500,000,000.0

然后做这样的事情:

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

答案 1 :(得分:0)

我认为你不能简化它,除了剥离几个parens,因为它可能不够复杂。该模式还将允许格式错误的字符串,如

50000,000,000.000000000