js正则表达式问题,加了引号与不加引号的区别

/^-?(?:0|(?:[1-9]\d{0,3}))(?:\.\d+)?$/.test("2333.") false
/^-?(?:0|(?:[1-9]\d{0,3}))(?:\.\d+)?$/.test(2333.) true
/^\"-?(?:0|(?:[1-9]\d{0,3}))(?:\.\d+)?\"$/.test("2333.") 加了\"后,结果还是 false
test后面是个字符串,但加了引号匹配就会错,不加引号反而是正确的。浏览器:火孤或IE结果都一样。
该怎么解释?我现在需要的结果是true,但后面一定是个字符串,不可能是2333.

这是你测的值的问题和引号无关,下面详解
把你的式子分解一下
var myTest=/^-?(?:0|(?:[1-9]\d{0,3}))(?:\.\d+)?$/;
var str=2223.;
alert(myTest.test(str));
情况一 var str=2223.;
这时 str是个整数值,相当于 str=2223.0 ,就是 str=2223
情况二 var str="2223."; str是包含点的字符串

再来分析你的正则表达式,主要是后面的(?:\.\d+)?,它的含义是如果有点的话点后要跟至少一个数字。
现在真相大白了吧,当你测试情况一时(不加引号)实际测的是2333,因为没有点所有返回真,测情况二时后面有点,那就要跟至少跟一个数字才为真。
温馨提示:答案为网友推荐,仅供参考
相似回答