我想弄清楚为什么验证总是失败?正则表达式应该没问题,我想问题应该在if(loginreg.test(login) && passwordreg.test(password) && repassword==password)
的某个地方。有人可以帮帮我吗?
function CheckAuthData() {
var loginreg = /^(?=.*[A-Z])(?=.*\d)[A-Za-z\d]{4,}\d$/g;
var login = document.getElementById("login").value;
var passwordreg =
/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{1,}$/g;
var password = document.getElementById("password").value;
var repassword = document.getElementById("repassword").value;
if(loginreg.test(login) && passwordreg.test(password) && repassword==password){
document.getElementById("labellogin").innerHTML = "";
document.getElementById("labelpassword").innerHTML = "";
document.getElementById("labelrepassword").innerHTML = "";
document.getElementById("pers_data").style.display = "block";
}
if(!loginreg.test(login)){
var label = document.getElementById("labellogin").innerHTML = "Login error!";
document.getElementById("labellogin").style.color = "red";
}
if(!passwordreg.test(password)){
document.getElementById("labelpassword").innerHTML = "Password error!";
document.getElementById("labelpassword").style.color = "red";
}
if(repassword!=password){
document.getElementById("labelrepassword").innerHTML =
"Should be the same password!";
document.getElementById("labelrepassword").style.color = "red";
}
}
答案 0 :(得分:3)
唯一真正的错误我可以看到,如果其中任何一个条件一次,那么你永远不会清除它发生的元素red
。但是,由于你清除了元素之外的文本,它可能并不重要。
也就是说,两次测试相同的条件(在你的第一个if
然后再在后续的情况下,反转)是一个等待发生的维护问题,就像函数中所有重复的代码一样。
每次调用函数时,您也不需要重新创建正则表达式,并且不需要g
标记。
这解决了上面的各种问题(请注意:我假设这包含在某种范围函数中,因此我们不会通过移动那些正则表达式来创建新的全局变量):
var loginreg = /^(?=.*[A-Z])(?=.*\d)[A-Za-z\d]{4,}\d$/;
var passwordreg =
/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{1,}$/;
function CheckAuthData() {
var login = document.getElementById("login").value;
var password = document.getElementById("password").value;
var repassword = document.getElementById("repassword").value;
var failed = false;
updateField("labellogin", loginreg.test(login), "Login error!");
updateField("labelpassword", passwordreg.test(password), "Password error!");
updateField("labelrepassword", repassword == password, "Should be the same password!");
if(!failed) {
document.getElementById("pers_data").style.display = "block";
}
function updateField(id, valid, message) {
var element = document.getElementById(id);
element.innerHTML = valid ? "" : message;
element.style.color = valid ? "" : "red";
failed = failed || !valid;
}
}
这是一个CW因为......嗯......它可能实际上没有回答这个问题,因为问题中没有足够的信息。但希望它有所帮助。