关于正则的小问题
在验证手机号和密码表单提交时,在第一次提交正确时,再次点击提交会判断错误,判断的正则表达式代码如下:
var reg1 = /1[0-9]{10}/g;//手机号判断:第一位以1开头的11位号码
var reg2 = /[\w]{6,16}/g;//密码判断:以数字和字母构成的长度为6-16为的字符串
btn.onclick = function(){
var ID = id.value;
var PW = password.value;
var key1 = reg1.test(ID);
var key2 = reg2.test(PW);
console.log(id.value);
console.log(password.value);
if(key1 && key2){
text.innerHTML = "注册成功!";
}else{
text.innerHTML = "输入有误!";
}
}
第一次输入正确格式的手机号和密码判断正确
第二次点击验证时表单里的内容没变,但是判断成了错误
原因
在使用全局查找/g来写正则表达式时,reg.test()的调用会隐性导致reg.lastIndex的值会改变,使下次查找符合的子串时不再从头开始查找,因此再次点击会报错
var reg1 = /1[0-9]{10}/g;
var reg2 = /[\w]{6,16}/g;
btn.onclick = function(){
var ID = id.value;
var PW = password.value;
console.log(reg1.lastIndex);//使用reg.test()前
console.log(reg2.lastIndex);
var key1 = reg1.test(ID);
var key2 = reg2.test(PW);
console.log(id.value);
console.log(password.value);
console.log(reg1.lastIndex);//使用reg.test()后
console.log(reg2.lastIndex);
if(key1 && key2){
text.innerHTML = "注册成功!";
}else{
text.innerHTML = "输入有误!";
}
}
第一次点击
第二次点击
解决办法
1.去掉/g
2.将reg.lastIndex值手动设成0
转载:https://blog.csdn.net/zyx990404/article/details/101312161
查看评论