5

パスワードを検証したい:

  • 少なくとも1つの番号が含まれています
  • 大文字を少なくとも1つ含む(大文字)
  • 少なくとも1つの通常の文字(小文字)を含む

このコードを使用しました

function validate()
{   
    var a=document.getElementById("pass").value
    var b=0
    var c=0
    var d=0;
    for(i=0;i<a.length;i++)
    {
        if(a[i]==a[i].toUpperCase())
            b++;
        if(a[i]==a[i].toLowerCase())
            c++;
        if(!isNaN(a[i]))
            d++;
    }
    if(a=="")
    {
        alert("Password must be filled")
    }
    else if(a)
    {
        alert("Total capital letter "+b)
        alert("Total normal letter "+c)
        alert("Total number"+d)
    }   
}

混乱させるのは、数字を入力すると大文字としてカウントされる理由です。

4

4 に答える 4

7

これには正規表現の方が適しています。検討:

var containsDigits = /[0-9]/.test(password)
var containsUpper = /[A-Z]/.test(password)
var containsLower = /[a-z]/.test(password)

if (containsDigits && containsUpper && containsLower)
....ok

よりコンパクトですが互換性の低いオプションは、正規表現の配列に対してブール集計を使用することです。

var rules = [/[0-9]/, /[A-Z]/, /[a-z]/]
var passwordOk = rules.every(function(r) { return r.test(password) });

ドキュメント:テストすべて

于 2012-04-17T06:49:11.530 に答える
1

"1" .toUpperCase == "1"!あなたはそれについて何と言いますか:)あなたはこのようにあなたのチェックをすることができます:

for(i=0;i<a.length;i++)
    {
        if('A' <= a[i] && a[i] <= 'Z') // check if you have an uppercase
            b++;
        if('a' <= a[i] && a[i] <= 'z') // check if you have a lowercase
            c++;
        if('0' <= a[i] && a[i] <= '9') // check if you have a numeric
            d++;
    }

ここで、b、c、またはdが0に等しい場合、問題があります。

于 2012-04-17T06:40:25.020 に答える
0

toUpperCase()およびtoLowerCase()は、変換できない場合でも文字を返すため、数値のテストは成功します。

代わりに、isNaN(a[i])toLowerCase / toUpperCaseを使用してテストする前に、まずtrueを確認する必要があります。

于 2012-04-17T06:43:12.783 に答える
0

非常に短い方法は次のとおりです。

var pwd = document.getElementById("pass").value,
    valid = Number(/\d/.test('1abcD'))+
            Number(/[a-z]/.test('1abcD'))+
            Number(/[A-Z]/.test('1abcD')) === 3;
于 2012-04-17T14:56:52.813 に答える