小言_互联网的博客

关于正则表达式的一些问题

274人阅读  评论(0)

关于正则的小问题

在验证手机号和密码表单提交时,在第一次提交正确时,再次点击提交会判断错误,判断的正则表达式代码如下:

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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场