我想验证密码:
我使用了这段代码
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)
}
}
让我感到困惑的一件事是,如果我输入一个数字,它也算作大写字母???
答案 0 :(得分:4)
正则表达式更适合这种情况。考虑:
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) });
答案 1 :(得分: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,则存在问题。
答案 2 :(得分:0)
toUpperCase()和toLowerCase()仍将返回该字符,如果它无法转换,那么您的测试将成功获得数字。
相反,在使用toLowerCase / toUpperCase进行测试之前,应首先检查isNaN(a[i])
是否为真。
答案 3 :(得分:0)
非常简短的方法可能是:
var pwd = document.getElementById("pass").value,
valid = Number(/\d/.test('1abcD'))+
Number(/[a-z]/.test('1abcD'))+
Number(/[A-Z]/.test('1abcD')) === 3;