1

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

$('.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');
        } 
    }
}
4

1 回答 1

2

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

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
    };
}
于 2012-09-26T14:22:03.803 回答