Javascript:特殊字符的验证



我正在进行一些验证,似乎无法检查特殊字符,不应该使用任何字符。目前我获取值,制作一个数组并检查大写和数字。我还需要一种方法来检查特殊字符。我发现的另一个小问题是,当输入数字时,它会传递大写字母。只是在寻找如何解决这个问题的一些方向。

$('.tooltip').on({  
    focusin: function(){ //make
        var top = $(this).offset().top 
        var left = $(this).offset().left + $(this).outerWidth()
        $('.tip').remove()
        $('body').append("<div class='tip' style='top:"+ top +"px;left:"+left+"px;'><div class='arrow'></div></div>")
        $('.tip').animate({width: 'show', opacity: 'show'})
        $(tipContent).appendTo('.tip')
    },
    focusout: function(){ //remove
        $('.tip').fadeOut(function(){$(this).remove()})
    },
    keyup: function(){ if (event.keyCode == 16) return //validate       
        var val = $(this).val()
        validate(val.split(""), val);
    },
})
function validate(letters, val){
    for (var i = 0; i < letters.length; i++){
        if( letters[i] === letters[i].toUpperCase() ) { //uppercase check
              console.log(letters[i] + ": " + 'Uppercase Passed');
        }else{console.log('Uppercase Failed');
        } 
        if( letters.length >= 9 ) { //min limit
              console.log(letters[i] + ": " + 'Minimum Limit Passed');
        }else{console.log('Minimum Limit Failed');
        }
        if( parseInt(letters[i]) > 0 ) { //number check
              console.log(parseInt(letters[i]) + ' passed');
        }else{console.log('at least 1 char failed');
        } 
    }
}

一个选项可能是使用正则表达式,这使您的要求易于制定:

function validate(value) {
    var regex = /^[A-Z0-9]*$/; // consist only of uppercase letters and digits
    var digit = /d/; // contains a digit
    if (regex.test(value) && digit.test(value) && value.length >= 9)
        console.log("Test passed");
    else
        console.log("Test failed");
}

您甚至可以将它们组合成一个正则表达式:

function validate(value) {
    return /^(?=.*d)[A-Z0-9]{9,}$/.test(value);
//          |   |         |      |
//   string /   |     consists    string end
// beginning    |     of only
//              /     upper alphabet letters and numbers,
// somewhere ahead     at least 9 of them
// comes a digit
}

好的,如果您单独需要这些步骤,我们应该能够做到这一点。为了识别大写字母,我们只能使用正则表达式[A-Z],但随后变音等将无法识别。如果您将它们作为特殊字符处理,我们可以轻松使用此正则表达式:

/^(?=.*d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]).{9,}$/
       |         |              |
     digit   uppercase    special char

如果您不希望这样做(或作为单步应用的相同正则表达式),我们可以使用以下条件测试特殊字符:它不是大写或小写的,也不是数字。

function validation(value) {
    var uc = false,
        lc = false,
        sc = false,
        di = false,
        len = value.length;
    for (var i=0; i<len; i++) {
        var letter = value.charAt(i),
            isUpper = letter.toUppercase() == letter,
            isLower = letter.toLowercase() == letter;
        if (isUpper && !isLower)
            uc = true;
        else if (isLower && !isUpper)
            uc = true;
        else // isLower && isUpper - no alphabetic character
            if (/d/.test(letter))
                di = true;
            else
                sc = true;
    }
    return {
        someUppercase: uc,
        someLowercase: lc,
        someSpecial: sc,
        someDigit: di,
        length: len,
        longEnough: len >= 9
    };
}

最新更新