2012-04-17 12 views
5

I Passwort validieren möchten:Wie Zahl und Großbuchstaben validieren in Javascript

  • enthalten mindestens 1 Nummer
  • enthalten mindestens 1 Großbuchstaben (Großbuchstaben)
  • enthalten mindestens 1 normaler Brief (Klein)

benutzte ich diesen Code

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

Eine Sache, die mich verwirren lassen, ist warum, wenn ich eine Nummer eingabe, es auch als Großbuchstabe zählen?

Antwort

1

"1" .toUpperCase == "1"! Was sagen Sie, dass :) Sie Ihre Überprüfung wie dies tun könnte:

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

Nun, wenn b, c oder d gleich 0 ist, gibt es ein Problem.

+0

danke dude, es funktioniert :) Um das Problem zu lösen, benutze ich if (0 <= a [i] && a [i] <= 9) ohne '' – greenthunder

+0

Ich bin froh, nützlich zu sein! Reguläre Ausdrücke sind geeigneter für diese Art von Validierungen, aber ich vermutete, dass Sie mit diesen nicht sehr vertraut sind und Ihr Programmierdenken einige Verbesserungen benötigt (der von Ihnen gepostete Code ist ziemlich schlecht) und deshalb habe ich diese Lösung ähnlich wie Ihre gepostet. – gabitzish

+0

Du hast Recht .. Ich bin ein Neuling in Javascript coz Ich begann zu lernen, dass letzten Donnerstag>. < – greenthunder

0

toUpperCase() und toLowerCase() wird immer noch das Zeichen zurückgeben, wenn es nicht konvertiert werden kann, so dass Ihre Tests für Zahlen erfolgreich sein werden.

Stattdessen sollten Sie zuerst prüfen, ob isNaN(a[i]) wahr ist, bevor Sie mit toLowerCase/toUpperCase testen.

4

Reguläre Ausdrücke sind dafür besser geeignet. Bedenken Sie:

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

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

Eine kompakte, aber weniger kompatibel Option ist ein boolean Aggregat über eine Reihe von regulären Ausdrücken zu verwenden:

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

Docs: test, every

+0

how to containsDigits/containsUpper/containsLower? Sind diese Syntax? Ich habe versucht, wenn (a [i] == containsUpper()) in, es hat nicht funktioniert – greenthunder

+0

Nein, das sind Variablen, genau wie a, b, c in Ihrem Code. Ich habe einige 'vars' zur besseren Übersicht hinzugefügt. – georg

0

Der sehr kurze Weg sein könnte :

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