日期:2014-05-16  浏览次数:20428 次

正则表达式返回结果为何不同
<script type="text/javascript">
<!--
var re=new  RegExp(/^-?\d+$/g);
alert(re.test("22"));
alert(re.test("22"));
alert(re.test("22"));
alert(re.test("22"));
alert(re.test("22"));
//-->
</script>
为何
第一次返回  true 
第二次返回  false 
第三次返回  true 
第四次返回  false 
。。。。。。。。。。。。。。。。
正则表达式

------解决方案--------------------

var re=new  RegExp('^-?\\d+$');
alert(re.test("22"));
alert(re.test("22"));
alert(re.test("22"));
alert(re.test("22"));
alert(re.test("22"));

或者

var re=/^-?\d+$/;
alert(re.test("22"));
alert(re.test("22"));
alert(re.test("22"));
alert(re.test("22"));
alert(re.test("22"));

不要g
------解决方案--------------------
js 正则表达式 有两种写法:一个是 正则表达式字面量方式reg=/^xxxxxxxxxxx$/img,另一种就是 利用 RegExp构造函数 var reg=new RegExp("普通字符串","img标识符").
------解决方案--------------------
主要是lastIndex在作怪,因为你加了g修正符,所以内部会有个属性即lastIndex保存上次匹配后,下次匹配的起始位置,发现到达串尾会有个重置操作,所以你的例子出现了true,false交叠的情况。
要么不要g,要么自己置0.
  <script type="text/javascript">
<!--
var re=new  RegExp(/^-?\d+$/g);
alert(re.test("22"));
re.lastIndex = 0;
alert(re.test("22"));
re.lastIndex = 0;
alert(re.test("22"));
re.lastIndex = 0;
alert(re.test("22"));
re.lastIndex = 0;
alert(re.test("22"));
re.lastIndex = 0;
//-->
</script>

------解决方案--------------------
你既然用了 ^$ ,那就是在格式验证了,所以就不要用g来全文匹配了