2012-04-17 12 views
5

voglio per convalidare la password:Come convalidare numero e la lettera maiuscola in javascript

  • contengono almeno 1 numero
  • contenere almeno 1 lettera maiuscola (maiuscolo)
  • contenere almeno 1 lettera normale (minuscolo)

ho usato questo codice

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

Una cosa che mi fa confondere è il motivo per cui se inserisco un numero, conteggia anche la lettera maiuscola ???

risposta

1

"1" .toUpperCase == "1"! Che ne dici di quel :) Si potrebbe fare il vostro controllo in questo modo:

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

Ora, se b, c, d o uguale a 0, c'è un problema.

+0

grazie amico, funziona :) per risolvere il problema io uso se (0 <= a [i] && a [i] <= 9) senza '' – greenthunder

+0

Sono contento di essere utile! Le espressioni regolari sono più adatte per questo tipo di convalide, ma ho il sospetto che tu non abbia molta familiarità con quelle e il tuo pensiero di programmazione necessiti di alcuni miglioramenti (il codice che hai postato è piuttosto cattivo) ed è per questo che ho postato questa soluzione simile alla tua. – gabitzish

+0

Hai ragione .. Sono un novizio in javascript coz Ho iniziato a imparare quello giovedì scorso. < – greenthunder

0

toUpperCase() e toLowerCase() restituiranno comunque il carattere se non può essere convertito, quindi i test avranno esito positivo per i numeri.

Invece, è necessario verificare prima che isNaN(a[i]) sia vero prima di eseguire il test utilizzando toLowerCase/toUpperCase.

4

Le espressioni regolari sono più adatte a questo. Considerare:

var containsDigits = /[0-9]/.test(password) 
var containsUpper = /[A-Z]/.test(password) 
var containsLower = /[a-z]/.test(password) 

if (containsDigits && containsUpper && containsLower) 
....ok 

Un'opzione più compatto ma meno compatibile è quello di utilizzare un aggregato booleano su un array di regex:

var rules = [/[0-9]/, /[A-Z]/, /[a-z]/] 
var passwordOk = rules.every(function(r) { return r.test(password) }); 

Documenti: test, every

+0

come usare containsDigits/containsUpper/containsLower? Sono quelle sintassi? Ho provato se (a [i] == containsUpper()) in, non ha funzionato – greenthunder

+0

No, queste sono variabili, proprio come a, b, c nel tuo codice. Ho aggiunto alcuni 'var's per chiarezza. – georg

0

Il modo molto breve potrebbe essere :

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