javascript正则表达式的test奇怪问题

有一段验证是否是yyyy/MM日期类型的正则表达式如下:
var regexp = /^(19|2\d)\d{2}\/(0[1-9]|1[012])$/g;
var val = "2009/12";
alert(regexp.test(val));
alert(regexp.test(val));
但是两次alert出来的结果却不相同,分别是ture和false。很不理解,然后查了一些资料发现原因如下。
如果模式有全局选项,每次test都会保留上次匹配位置,即lastIndex。

对应的解决方案有两种:
1.每次完成匹配之后重置lastIndex属性。
2.去掉正则表达式后面的g。

即如下:
var regexp = /^(19|2\d)\d{2}\/(0[1-9]|1[012])$/g;
var val = "2009/12";
alert(regexp.test(val));
regexp.lastIndex = 0;
alert(regexp.test(val));

var regexp = /^(19|2\d)\d{2}\/(0[1-9]|1[012])$/;
var val = "2009/12";
alert(regexp.test(val));
alert(regexp.test(val));
posted @ 2012-04-17 17:47  fogwu  阅读(147)  评论(0编辑  收藏  举报