2016-12-16 3 views
0

Je n'arrive pas à comprendre pourquoi cette vérification/validation alphanumérique ne fonctionne pas. J'ai coupé les autres options de commutateur (que tout fonctionne) parce que le seul contrôle qui ne fonctionne pas est le else if (!(pswRegex.test(inputValue))). Je ne suis pas un expert jQuery/Javascript, alors je manque quelque chose?Validation alphanumérique

La vérification de l'expression régulière doit autoriser un mot de passe seulement s'il est composé de lettres (majuscules ou non) et de chiffres.

$(document).ready(function(){ 

    $('.req').on('input', function() { 
     var inputID = $(this).attr('id'); 
     var inputValue = $(this).val(); 
     var valueLenght = $(this).val().length; 

     switch (inputID) { 
      case "psw": 
      var pswRegex = /^[a-zA-Z0-9]+$/; 
      if (valueLenght < 8) { 
       $('#subButton').prop('disabled', true); 
       $('#err' + inputID).show().text("Password must be 8 carachters minimum"); 
      } 
      else if (!(pswRegex.test(inputValue))) { 
       $('#subButton').prop('disabled', true); 
       $('#err' + inputID).show().text("Password must be alphanumeric"); 
      } 
      else { 
       $('#subButton').prop('disabled', false); 
       $('#err' + inputID).hide(); 
      } 
     break; 
     } 
    }); 

}); 

[EDIT]: ce que je voulais obtenir l'affichage d'une erreur a été si la chaîne inputValue contenait seulement lettres ou seulement numéros: l'utilisateur doit fournir un mot de passe alphanumérique. Merci à Aioros et Peeyush Kushwaha je compris que je ne peux pas y parvenir avec seulement une expression régulière (au moins avec ma connaissance réelle sur les expressions régulières), alors j'ai changé mon état else if avec celui-ci:

else if (/^[0-9]+$/.test(inputValue) || /^[a-zA-Z]+$/.test(inputValue)) { 
       $('#subButton').prop('disabled', true); 
       $('#err' + inputID).show().text("Password must be composed by both letters and numbers"); 
      } 

[EDIT 2]: une autre solution propre et élégante est celle fournie par PanterA. Avec une seule condition if vous pouvez afficher (uniquement) un déclaration d'erreur à l'utilisateur en disant que le mot de passe doit être au moins 8 carachters de long et composé par, au moins: une lettre majuscule, une lettre minuscule et un numéro .

var pswRegex = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{8,}$/; 
if (!pswRegex.test(inputValue)) { 
    $('#subButton').prop('disabled', true); 
    $('#err' + inputID).show().text("Password must be at least 8 carachters long and composed by, at least, one capital letter, one lower case letter and one number"); 
} 
+3

Semble fonctionner correctement dans un [violon] (https://jsfiddle.net/w7890gLj/). Qu'est-ce qui ne fonctionne pas pour vous exactement? Quelle est la contribution? – Aioros

+0

@Aioros Peut-être que j'utilise la regex 'test()' dans le mauvais sens, mais supposons que 'var inputValue =" asdwerasd ";' -> cela devrait retourner 'false' de cette vérification' (! (PswRegex. test (inputValue))) 'et, dans votre fichier, imprimez dans la console.log 'regex', n'est-ce pas? Le problème est qu'il saute la vérification comme si elle était toujours 'true' affichant' ok' dans votre exemple et l'instruction 'else' dans la mienne – Brigo

+2

@brigo Il ne devrait pas retourner false,'/^ [a-zA-Z0- 9] + $/'signifie" un caractère ou un chiffre " –

Répondre

0

Ce regex peut vous aider:

/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).*$/ 

Le lookahead positif (?=) correspond à rien à l'intérieur de sa parenthèse sans faire partie du résultat. Ici, nous voulons que la regex trouve l'occurrence minimale de n'importe quoi (.*?) suivi des caractères que nous voulons appliquer (lettres majuscules par exemple).

Donc, ce regex va vérifier:

  • Au moins une lettre majuscule: (?=.*?[A-Z])
  • Au moins une lettre minuscule: (?=.*?[a-z])
  • Au moins un chiffre: (?=.*?[0-9])

Vérifiez-le: https://jsfiddle.net/q7do1woL/

Aussi, si vous voulez valider la longueur de la chaîne avec regex, vous pouvez ajouter un quantificateur avec une valeur minimale:

/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{8,}$/ 

Hope it helps.

+0

C'est cool mate! Je ne suis jamais allé si profondément dans les expressions régulières parce qu'ils m'a toujours un peu effrayé, mais c'est la solution de travail la plus propre pour mon problème! Merci, je vais étudier plus sur regex – Brigo