Javascript 功能未拾取验证的第二部分

Javascript 功能未拾取验证的第二部分,javascript,jquery,forms,validation,Javascript,Jquery,Forms,Validation,我正在进行表单验证,我设置了一组逻辑结构和一组验证函数。一切都在进行,直到最后一组逻辑结构,它必须验证社会保险号码 var errors = 0; e.preventDefault(); if(checkIsNull($('#firstname').val())){ errors++; $("#firstname").closest('.input-group').addClass('has-error'); }

我正在进行表单验证,我设置了一组逻辑结构和一组验证函数。一切都在进行,直到最后一组逻辑结构,它必须验证社会保险号码

    var errors = 0;         
    e.preventDefault();

    if(checkIsNull($('#firstname').val())){
        errors++;
        $("#firstname").closest('.input-group').addClass('has-error');
    }else{
        $("#firstname").closest('.input-group').removeClass('has-error');
    }

    if(checkIsNull($('#lastname').val())){
        errors++;
        $("#lastname").closest('.input-group').addClass('has-error');
    }else{
        $("#lastname").closest('.input-group').removeClass('has-error');
    }


    var phone = ['phone_area', 'phone_exch', 'phone_num'];

    for(var i = 0; i < phone.length; i++){
        if(checkIsNull($('#'+phone[i]+'').val()) || onlyNumbers($('#'+phone[i]+'').val())){
            errors++;
            $('#'+phone[i]+'').closest('.input-group').addClass('has-error');
        }else{
            $('#'+phone[i]+'').closest('.input-group').removeClass('has-error');
        }
    }

    if(checkIsNull($('#email').val()) || !validateEmail($('#email').val())){
        errors++;
        $("#email").closest('.input-group').addClass('has-error');
    }else{
        $("#email").closest('.input-group').removeClass('has-error');
    }

    var dob = ['birth_month', 'birth_day', 'birth_year'];

    for(var i = 0; i < dob.length; i++){
        if(checkIsNull($('#'+dob[i]+'').val()) || onlyNumbers($('#'+dob[i]+'').val())){
            errors++;
            $('#'+dob[i]+'').closest('.input-group').addClass('has-error');
        }else{
            $('#'+dob[i]+'').closest('.input-group').removeClass('has-error');
        }
    }

    var ssn = ['ssn_group', 'ssn_id', 'ssn_number'];

    for(var i = 0; i < ssn.length; i++){
        if(checkIsNull($('#'+ssn[i]+'').val()) || onlyNumbers($('#'+ssn[i]+'').val())){
            errors++;
            $('#'+ssn[i]+'').closest('.input-group').addClass('has-error');
        }else{
            $('#'+ssn[i]+'').closest('.input-group').removeClass('has-error');
        }
    }
电话号码和社会保险号码的验证方式完全相同,但当我用社会保险号码输入字母时,它不会拾取输入字段中的字母


对此有什么想法,或者有人能给我指出正确的方向吗?

函数onlyNumbers实际上使用了'\D'而不是'\D','\D'的意思是所有非数字的,而不是你想象的数字。

我解决了自己的问题。发生的事情是,当检查电话号码、出生日期和ssn的循环被迭代时,如果最后一个项目被签出,has error类将被删除。因此,当发现错误时,我必须在这些循环中添加中断,以保持显示正确

实际上,no\D将检查它是否包含非数字的内容。因此,它的工作原理与预期相同。我解决了这个问题。我需要在迭代.input组循环时添加中断。函数名为onlyNumber,您要验证字符串是否为非数字,这就是我的观点。不管怎么说,休息一下也不是一个好办法。你的观点是无效的。正则表达式模式将捕获正确识别的任何东西,不管它是否是字符串。阅读regex模式以及它们如何处理信息。如果你能找到一种更好的方法来验证这些信息而不使用中断,告诉我。实际上你的整个算法和代码都有点混乱,更不用说你真的不知道如何使用正则表达式了。所以这里有一个更干净的解决方案,您能解释一下,验证:[]部分吗?
//check if an input field is null
function checkIsNull(s){
    if(s == ''){
        return true;
    }else{
        return false;
    }
}

//check if a phone number entered is valid
function validatePhoneNumber(s){
    var str = s;
    str = str.replace(/[^0-9]/g, '');
    if(str.length != 10 || str == ""){
        return false;
    }
    else{
        return true;
    }
}

//check if something only has numbers in it
function onlyNumbers(num){
    var res = /\D+/g.test(num);
    return res;
}

function validateEmail(s){
    var str = s;
    var res = str.match(/[!#$%&'*+-\/=?^_`{|}~a-zA-Z0-9.]*@\w+\.\w+/g);
    if(res){
        return true;
    }else{
        return false;
    }
}