JavaScript RegEx匹配无效数字

Jar*_*d D 2 javascript regex numbers

当使用JavaScript的RegEx来验证带小数位的数字时,我得到的结果不一致.目标是使用任何数字组合,后跟小数点和两位数.它工作正常,除了数千(没有分隔符).

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

^[0-9]+(\.[0-9][0-9])$
Run Code Online (Sandbox Code Playgroud)

有效数字:

10.99
0.75
999.99
5000.99
...etc
Run Code Online (Sandbox Code Playgroud)

数字无效:

1000
.75
0
...etc
Run Code Online (Sandbox Code Playgroud)

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

你可以在这里复制问题:http: //jsfiddle.net/hcAcQ/

eld*_*his 5

你需要在之前逃避反斜杠.,我相信:

^[0-9]+(\\.[0-9][0-9])$
Run Code Online (Sandbox Code Playgroud)

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

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

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

//instead of new valueFormat = new RegExp('^[0-9]+(\\.[0-9])$');
valueFormat = /^[0-9]+\.[0-9][0-9]$/;
Run Code Online (Sandbox Code Playgroud)

  • 在javascript中定义正则表达式时,使用本机/.../构造来避免此问题... http://jsfiddle.net/gHHPG/ (3认同)