如图,我在第1个1后面输入了一个非法字符空格,但是在后面每当输入偶数个字符的时候能够检测出来,输入奇数个字符的时候不能检测出来,为什么? (不加g修饰符是没问题的,但是加了g也不应该检测不出来啊?)
这是我用控制台调试的结果
代码:
window.onload=function(){
var re=/[^0-9A-Za-z\u4E00-\u9FA5]/g; //正则加了g修饰符
username.onkeyup=function(){
//判断输入内容的语句
if (re.test(this.value)) {
console.log(this.value); //控制台调试语句
name_msg.innerHTML='<img class="notice" src="./images/notice_red.png">含有非法字符';
}else if (this.value==="") {
name_msg.innerHTML='<img class="notice" src="./images/notice_red.png">不能为空';
}else{
name_msg.innerHTML='<img class="notice" src="./images/ok_green.png">';
}
}
}
因为全局匹配模式进行一次成功匹配后会保存上一次匹配到的位置为lastIndex,下一次从lastIndex开始匹配。
所以第一次匹配到之后,下一次如果后半段没有非法字符,就会匹配失败,然后在下一次又回复正常。