首页 文章

如何在javascript中验证数字和大写字母

提问于
浏览
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 回答

  • 0

    “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,则存在问题 .

  • 1

    正则表达式更适合这种情况 . 考虑:

    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) });
    

    文件:testevery

  • 0

    如果无法转换,toUpperCase()和toLowerCase()仍将返回该字符,因此您的测试将成功进行数字处理 .

    相反,在使用toLowerCase / toUpperCase进行测试之前,应首先检查 isNaN(a[i]) 是否为true .

  • 4

    很短的方式可能是:

    var pwd = document.getElementById("pass").value,
        valid = Number(/\d/.test('1abcD'))+
                Number(/[a-z]/.test('1abcD'))+
                Number(/[A-Z]/.test('1abcD')) === 3;
    

相关问题