2

使用 JavaScript 的 RegEx 验证带小数位的数字时,我得到的结果不一致。目标是数字的任意组合,后跟一个小数点和另外两个数字。它工作正常,除了以千为单位的数字(无分隔符)。

这是我正在使用的表达式:

^[0-9]+(\.[0-9][0-9])$

有效号码:

10.99
0.75
999.99
5000.99
...etc

无效号码:

1000
.75
0
...etc

问题是它匹配数千个整数。这是一个内部应用程序,所以我不关心使用额外的分隔符。我已经使用http://regexpal.com/之类的工具测试了表达式,它给了我需要的结果,所以看起来 JS 中有一些东西导致了这个问题。

您可以在此处复制问题:http: //jsfiddle.net/hcAcQ/

4

2 回答 2

5

您需要在 之前转义反斜杠.,我相信:

^[0-9]+(\\.[0-9][0-9])$

4 位(或更大)数字起作用的原因是因为单个反斜杠实际上并没有将其转义.为句点字符,因此导致它充当通配符“匹配任何字符”点。

当您有 3 位或更少的数字时,这将失败,因为正则表达式中的每个匹配项都没有足够的字符,但是 4 位数字它会起作用(一个数字用于第一个字符类,一个用于.,一个用于另一个两个字符类。

正如您可能想要的那样,转义\将导致.实际被解释为文字字符。.您也可以将变量定义为正则表达式文字(MDN 示例;靠近顶部),这样您就不必处理\字符串中的转义字符:

//instead of new valueFormat = new RegExp('^[0-9]+(\\.[0-9])$');
valueFormat = /^[0-9]+\.[0-9][0-9]$/;
于 2012-11-13T18:43:37.687 回答
0

这有效(\。而不是。):

// valueFormat = new RegExp('^([0-9]+)(\.[0-9][0-9])$');    
valueFormat = new RegExp('^([0-9]+)(\\.[0-9][0-9])$');
于 2012-11-13T18:51:43.313 回答