首页 新闻 会员 周边

js写的一个登陆/注册时验证出现的问题

0
[待解决问题]

使用了正则表达式对账号和密码进行验证,使用了一个re变量作为每次验证后的结果,当re = 0(初始值)才能注册,但是我现在的问题是无论是否正确都能进行注册并发送请求,求助...
代码如下:
window.onload = function () {
let name = document.querySelector('#text-username');
let pass = document.querySelector('#text-password');
let register = document.querySelector('#register');
let login = document.querySelector('#login');
var re = 0;
var reg = [
/[1]{5,16}$/,
/[2]{1}[A-Za-z0-9_]{5,11}$/
];
// console.log(reg);
function check() {

	let indev = reg[0].test(name.value);
	if (name.value.length < 5 || name.value.length > 11) {
		alert('用户名至少5位且不得超过11位');
		re++;
	}
	if (!indev) {
		// reg_name = true;
		// name.innerHTML = "<font color='green'>用户名符合规则</font>";
		alert('用户名不符合规则');
		re++;
	}
	// else {
	// 	name.innerHTML = "<font color='red'>用户名不符合规则</font>";
	// }


	//
	let indec = reg[1].test(pass.value);
	if (pass.value.length < 6) {
		alert('密码至少6位');
		re++;
	}
	if (!indec) {
		// reg_pass = true;
		// pass.innerHTML = "<font color='green'>密码符合规则</font>";
		alert('密码不符合规则');
		re++;
	}
	// else {
	// 	// pass.innerHTML = "密码不符合规则";
	// 	alert('密码不符合规则');
	// }

}
// function checkName() {
// 	if (name.value.length < 5 || name.value.length > 11) {
// 		alert('用户名至少5位且不得超过11位');
// 		re++;
// 		let index = reg[0].test(name.value);
// 		if (index) {
// 			reg_name = true;
// 			name.innerHTML = "<font color='green'>用户名符合规则</font>";
// 		}
// 		else {
// 			name.innerHTML = "<font color='red'>用户名不符合规则</font>";
// 		}
// 	}
// }
// function checkPass() {
// 	let indec = reg[1].test(pass.value);
// 	if (pass.value.length < 6) {
// 		alert('密码至少6位');
// 		re++;
// 		if (indec) {
// 			reg_pass = true;
// 			pass.innerHTML = "<font color='green'>密码符合规则</font>";
// 		}
// 		else {
// 			pass.innerHTML = "<font color='red'>密码不符合规则</font>";
// 		}
// 	}
// }
// name.addEventListener('mouseout', checkName);
// pass.addEventListener('mouseout', checkPass);
login.addEventListener('click', check);
register.addEventListener('click', check);

//注册
if (re == 0) {
	register.addEventListener('click', () => {
		//原生ajax
		const xhr = new XMLHttpRequest();
		xhr.open("POST", "http://47.94.90.140:8888/api/register");
		let sendData = JSON.stringify({
			username: name.value,
			password: pass.value,
		});
		xhr.setRequestHeader('Content-type', 'application/json');
		xhr.send(sendData);
		xhr.onreadystatechange = () => {
			if (xhr.readyState === 4) {
				if (xhr.status === 200 && xhr.status < 300) {
					alert(JSON.parse(xhr.response).msg);
				}
			}

		}
	})
}
// else{
// 	alert('用户名或密码有误');
// }


//登陆
login.addEventListener('click', () => {
	const logEvent = new XMLHttpRequest;
	logEvent.open('POST', 'http://47.94.90.140:8888/api/login');
	let sendData = JSON.stringify({
		username: name.value,
		password: pass.value,
	});
	logEvent.setRequestHeader('Content-type', 'application/json');
	logEvent.send(sendData);
	logEvent.onreadystatechange = () => {
		if (logEvent.readyState === 4) {
			if (logEvent.status === 200) {
				alert(JSON.parse(logEvent.response).msg);
				sessionStorage.setItem('log_token', JSON.parse(logEvent.response).data.token);
				sessionStorage.setItem('nameID', name.value);
				sessionStorage.setItem('passwordID', pass.value);
				window.location.href = "./update.html";
			}
		}
	};

})

}


  1. a-zA-Z0-9_- ↩︎

  2. A-Z ↩︎

js
静待X的主页 静待X | 菜鸟二级 | 园豆:202
提问于:2022-02-06 22:37
< >
分享
所有回答(2)
2

你一开始声明 var re = 0;
然后写了
//注册
if (re == 0) {...}

直接运行判断为 0 当然会执行注册的操作

人间春风意 | 园豆:2335 (老鸟四级) | 2022-02-07 08:36
0

接楼上的话说就是,你要把
//注册
if (re == 0) {...}
放到
if (!indec) {
// reg_pass = true;
// pass.innerHTML = "<font color='green'>密码符合规则</font>";
alert('密码不符合规则');
re++;
}
后面

天龙座的流星雨 | 园豆:202 (菜鸟二级) | 2022-02-07 10:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册