如何编写循环进行字段验证

时间:2015-05-22 10:15:58

标签: javascript

我想弄清楚为什么验证总是失败?正则表达式应该没问题,我想问题应该在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";
    }
}

1 个答案:

答案 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因为......嗯......它可能实际上没有回答这个问题,因为问题中没有足够的信息。但希望它有所帮助。