所以,我有这个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
现在,上述工作,但我想知道是否有任何方法来简化它?
答案 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