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

关于正则的小问题

在验证手机号和密码表单提交时,在第一次提交正确时,再次点击提交会判断错误,判断的正则表达式代码如下:
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值