2

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

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

所以,像这样的字符串:

5
5.00
5000
5,000
5000.00
5,000.00

都会返回true

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

5,00
5,00.00
5.00.00
a5

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

4

2 回答 2

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+)$
于 2012-11-09T11:07:26.620 回答
0

我不认为你可以简化它,除了去掉一些括号,而且它可能还不够复杂。该模式还将允许格式错误的字符串,例如

50000,000,000.000000000
于 2012-11-09T11:09:08.833 回答