2012-04-17 47 views
5

我想验证密码号和大写字母:如何验证在JavaScript

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

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

回答

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,出现了问题。

+0

谢谢兄弟,它的作品:) 如果(0 <= a [i] && a [i] <= 9)解决了我使用 的问题,而没有'' – greenthunder 2012-04-17 07:13:21

+0

我很高兴能够实现!正则表达式更适合这种验证,但我怀疑你对这些不太熟悉,你的编程思想需要一些改进(你发布的代码非常糟糕),这就是为什么我发布类似于你的解决方案。 – gabitzish 2012-04-17 07:18:06

+0

你是对的..我是一个JavaScript的新手因为我上周四开始学习>< – greenthunder 2012-04-17 07:28:01

0

toUpperCase()和toLowerCase()仍然会返回字符,如果它不能被转换,所以你的测试会成功的数字。

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

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

文档:testevery

+0

如何使用containsDigits/containsUpper/containsLower?那些语法?我试过如果(a [i] == containsUpper())for,它不起作用 – greenthunder 2012-04-17 07:07:27

+0

不,这些是变量,就像代码中的a,b,c一样。为了清晰起见,我添加了一些'var's。 – georg 2012-04-17 07:08:22

0

非常短的路可能是:

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