【问题标题】:How to validate number and capital letter in javascript如何在javascript中验证数字和大写字母
【发布时间】:2012-04-17 22:56:52
【问题描述】:

我要验证密码:

  • 至少包含 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)
    }   
}

让我困惑的一件事是,为什么如果我输入一个数字,它也算作大写字母???

【问题讨论】:

    标签: javascript validation


    【解决方案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

    【讨论】:

    • 如何使用 containsDigits / containsUpper / containsLower?是那些语法吗?我尝试了 if(a[i]==containsUpper()) ,它没有工作
    • 不,这些是变量,就像代码中的 a、b、c 一样。为了清楚起见,我添加了一些vars。
    【解决方案2】:

    "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,那就有问题了。

    【讨论】:

    • 谢谢老兄,它的作品:) 解决我使用 if(0
    • 我很高兴能有用!正则表达式更适合这种验证,但我怀疑你对这些不是很熟悉,你的编程思维需要一些改进(你发布的代码很糟糕),这就是为什么我发布了这个与你的类似的解决方案。
    • 你是对的..我是 javascript 的新手,因为我上周四开始学习>.
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      很短的方法可能是:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-14
        • 2016-10-07
        • 2014-12-09
        相关资源
        最近更新 更多