2012-04-17 10 views
5

que desea validar la contraseña:Cómo validar número y letra mayúscula en javascript

  • contener al menos 1 número
  • contienen al menos 1 letra mayúscula (mayúscula)
  • contienen al menos 1 letra normal, (en minúsculas)

I utiliza este código

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 que me hace confundir es por qué si ingreso un número, también cuenta como letra mayúscula ???

Respuesta

1

"1" .toUpperCase == "1"! ¿Qué dice usted de eso :) Usted podría hacer su cuenta de cheques como esto:

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

Ahora bien, si B, C o D es igual a 0, no es un problema.

+0

gracias amigo, es trabajos :) para resolver el problema utilizo if (0 <= a [i] && a [i] <= 9) sin '' – greenthunder

+0

¡Me alegra ser útil! Las expresiones regulares son más adecuadas para este tipo de validaciones, pero sospecho que no estás muy familiarizado con ellas y tu pensamiento de programación necesita algunas mejoras (el código que publicaste es bastante malo) y es por eso que publiqué esta solución similar a la tuya. – gabitzish

+0

Tienes razón ... Soy un novato en Javascript porque comencé a aprender que el jueves pasado>. < – greenthunder

0

toUpperCase() y toLowerCase() seguirán devolviendo el carácter si no se puede convertir, por lo que las pruebas tendrán éxito para los números.

En su lugar, primero debe verificar que isNaN(a[i]) es verdadero antes de realizar pruebas usando toLowerCase/toUpperCase.

4

Las expresiones regulares son más adecuadas para esto. Considere:

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

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

Una opción más compacto, pero menos compatible es utilizar un agregado booleano sobre una gran variedad de expresiones regulares:

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

Docs: test, every

+0

cómo usar containsDigits/containsUpper/containsLower? ¿Son esa sintaxis? Intenté si (a [i] == containsUpper()) for, no funcionó – greenthunder

+0

No, estas son variables, como a, b, c en tu código. Agregué algunas 'var's para mayor claridad. – georg

0

La manera muy corto podría ser :

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