2012-04-17 51 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;