1

私はいくつかの検証に取り組んでおり、特別な文字をチェックすることに頭を悩ませているようには見えません。どれも使用しないでください。現在、値を取得し、配列を作成して、大文字と数字を確認しています。特別な文字もチェックする方法が必要です。私が見つけたもう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");
}

それらを1つの正規表現に結合することもできます。

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
}

OK、これらの手順を個別に必要とする場合は、それを実行できるはずです。大文字を認識するために正規表現を使用することもできます[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 に答える