2013-05-04 5 views
0

Excusez si c'est une question stupide. Je fais un sujet de conception de Web à l'université et suis complètement coincé. Je dois valider un mot de passe en utilisant Javascript pour m'assurer qu'il a et majuscule, minuscule, caractère numérique, et au moins 4 caractères.Mot de passe - caractères majuscules JavaScript

C'est le code que j'ai, il me donne des alertes pour dire que je n'ai pas inclus les caractères, mais quand je les ai inclus, je reçois toujours l'alerte. Toute aide appréciée.

var y = document.forms["loginDetails"]["password"].value; 
if (y.length < 4) { 
    alert("Your password needs a minimum of four characters") 
} 
if (y.search[/a-z/i] < 1) { 
    alert("Your password needs a lower case letter") 
} 
if (y.search[/A-Z/i] < 1) { 
    alert("Your password needs an uppser case letter") 
} 
if (y.search[/0-9/] < 1) { 
    alert("Your password needs a number") 
    return false; 
} 
+0

Je pense qu'il vous manque [] dans votre expression rationnelle. Cela devrait être par ex./[A-Z]/ – lopisan

+1

Je pense que le problème a été souligné, mais je noterai également que c'est un moyen ennuyeux et inutile d'appliquer de bons mots de passe. À tout le moins, réduire le nombre de restrictions arbitraires imposées à mesure que la longueur augmente (par exemple si je veux définir 'hitheremynameisjohnny', c'est beaucoup plus sûr que 'P4ss') – Dave

+1

Oh et vous cherchez une majuscule/minuscule caractère, mais vous définissez le drapeau 'i', ce qui signifie ignorer la casse. – Dave

Répondre

0

Notez que « recherche » est une fonction , donc vous devez l'appeler comme y.search(), pas avec crochets [] (ceux-ci sont utilisés pour accéder à un membre. Y « recherche » serait ont le même effet, mais la recherche [] n'est pas correct, car il est pas un tableau

+0

Il n'est pas nécessaire d'être un tableau. Vous pouvez également accéder aux propriétés des objets de fonction avec des crochets - bien que cela ne soit pas nécessaire ici, c'est une syntaxe valide :-) – Bergi

1

Essayez de changer votre code de cette façon par:.

  • Ajout return false; à chacun de la déclaration d'échec
  • changer le search() syntaxe de fonction. Vous n'avez pas besoin d'utiliser /i car il ne vérifie pas les cas.

code

var y = document.forms["loginDetails"]["password"].value; 
if (y.length < 4) { 
    alert("Your password needs a minimum of four characters") 
    return false; 
} 
if (y.search(/[a-z]/) < 1) { 
    alert("Your password needs a lower case letter") 
    return false; 
} 
if (y.search(/[A-Z]/) < 1) { 
    alert("Your password needs an uppser case letter") 
    return false; 
} 
if (y.search(/[0-9]/) < 1) { 
    alert("Your password needs a number") 
    return false; 
} 
+2

Le '/ i' le rend insensible à la casse. S'il vérifie le cas spécifiquement, vous devriez enlever cela ... –

+0

@AdamPlocher Merci pour le conseil. :) Modifié. ':)' –

+0

Merci, cela a fonctionné presque complètement, pour une raison quelconque, il ne reconnaît toujours pas lorsque les lettres minuscules ont été inclus et je ne peux pas comprendre pourquoi. Comme je l'ai dit, s'il vous plaît excusez mon ignorance, je suis complètement nouveau à cela! –

2

Votre code avait plusieurs erreurs

  • comparision devrait être <0 pas <1 (search retourne valeur négative lorsque regexp ne se trouve pas)
  • /i dans regexp (insensible à la casse - pas approprié lorsque essayer de comprendre les caractères majuscules/minuscules)
  • appel de la fonction de recherche était mauvaise (utilisation de [] au lieu de ())
  • dans regexp [] était absent ([] dans regexp signifie un caractère de plage donnée, donc [a-z] correspondront chaque caractère minuscule alors a-z correspondra à la chaîne juste 'a-z')

Il devrait ressembler à:

if (y.length < 4) { 
    alert("Your password needs a minimum of four characters") 
} else if (y.search(/[a-z]/) < 0) { 
    alert("Your password needs a lower case letter") 
} else if(y.search(/[A-Z]/) < 0) { 
    alert("Your password needs an uppser case letter") 
} else if (y.search(/[0-9]/) < 0) { 
    alert("Your password needs a number") 
} else { 
    // Pass is OK 
} 
2

Il y avait quelques problèmes avec votre code:

  1. String.search() retours -1 si l'expression régulière ne se trouve pas. La vérification par rapport à < 1 renverra toujours true incorrectement si la chaîne est trouvée au 0th (premier) caractère.
  2. String.search() est une fonction et doit être appelée avec des parenthèses () entourant les arguments, pas entre crochets [].
  3. Vous ne voulez pas effectuer insensible à la casse recherches dans vos expressions régulières, supprimez l'option /i. Essayez de savoir s'il y a eu ou non une erreur dans une autre variable.
  4. Ensuite, si l'un des cas a généré une erreur, vous pouvez renvoyer false.

Essayez ceci:

var error = false; 
var message = ''; 
if (y.length < 4) { 
    message += "Your password needs a minimum of four characters. "; 
    error = true; 
} 
if (y.search(/[a-z]/) == -1) { 
    message += "Your password needs at least one lower case letter. "; 
    error = true; 
} 
if (y.search(/[A-Z]/) == -1) { 
    message += "Your password needs at least one upper case letter. "; 
    error = true; 
} 
if (y.search (/[0-9]/) == -1) { 
    message += "Your password needs a number."; 
    error = true; 
} 
if (error) { 
    alert(message); 
    return false; 
} 
+0

Pure UX sage, montrant 4 alertes si l'utilisateur ne tape rien peut être un peu trop. – h2ooooooo

+1

@ h2ooooooo Merci pour votre commentaire. Vous avez raison de dire que les alertes multiples ne sont pas une bonne stratégie d'expérience utilisateur. J'ai mis à jour ma réponse pour stocker tous les messages dans une chaîne, puis présenter une alerte s'il y a au moins une erreur. – Aiias

0

le principal problème est que vous utilisez le « i » modificateur, ce qui indique l'expression rationnelle pour être insensible à la casse, essayez sans ce modificateur.

Pour améliorer l'expérience utilisateur que j'utilise un message d'erreur, donc, yo pourrait utiliser ce code:

if(/[a-z]+/.test(s) && /[A-Z]+/.test(s) && /\d+/.test(s) && s.length >= 4) 
    return true; 

alert("Your password needs Upper and lower case letters, numbers and a minimum four chars"); 
return false; 
0

Vous pouvez essayer ceci:

var y = document.forms["loginDetails"]["password"].value; 

if (y.length < 4) { 
    alert("Password should contain minimum four characters"); 
    return false; 
} 

var pwd=/^(?=.*[a-z])/; 
var pwd1=/^(?=.*[A-Z])/; 
var pwd2=/^(?=.*[0-9])/; 

if (pwd.test(y) == false) { 
    alert("Password Should contain atleast One lowerCase letter"); 
    return false; 
} 

if (pwd1.test(y) == false) { 
    alert("Password Should contain atleast One UpperCase letter"); 
    return false; 
} 
if (pwd2.test(y) == false) { 
    alert("Password Should contain atleast One Number"); 
    return false; 
} 

Ou, vous pouvez faire la même chose une seule ligne aussi:

var pwd=/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])/; 
if (pwd.test(y) == false) { 
    alert("Password Should contain atleast One Number, One UpperCase and a lowercase letter"); 
    return false; 
} 
Questions connexes