2011-06-07 1 views
2

je besoin d'un regex pour les critères suivants:Mot de passe Regex (de javascript côté client)

Atleast 7 caractères alphanumériques avec 1 caractère spécial

je ceci:

^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$!%^&+=]).*$ 

Il fonctionne très bien si Je tape Password1! mais ne fonctionne pas pour PASSWORD1 !.

Ne travaillera pas pour: Stmaryshsp1tal! J'utilise le plugin de validation Jquery où je spécifie l'expression régulière.

Lorsque j'utilise un validateur d'expression régulière et précise l'expression rationnelle suivante:

^.*(?=.{7,})(?=(.*\W){1,}).*$ 

Il fonctionne parfaitement sans aucun problème. Lorsque je définis cette regex dans la validation Jquery, je l'utilise ne fonctionne pas.

S'il vous plaît quelqu'un peut-il nous éclairer à ce sujet? Je veux comprendre pourquoi mon premier regex ne fonctionne pas.

+2

£, ... et π ne sont pas assez bons caractères spéciaux pour vous? – Quentin

+4

FWIW, il est parfois judicieux d'exécuter plusieurs tests regex par opposition à un test massivement complexe. –

+0

Voulez-vous exactement 1 caractère spécial? Ou au moins 1? – Episodex

Répondre

0
(?=.\d)(?=.[a-z]) 

essaie de faire correspondre un chiffre et un caractère alphanumérique au même endroit. Rappelez-vous que (?= ...) ne globalement rien.

Ce que vous voulez est probablement:

^(?=.*\W)(?=(.*\w){7}) 

Ceci est exactement le même que veryfying que votre chaîne à la fois correspond ^.*\W (au moins un caractère spécial) et ^(.*\w){7}) (7 caractères alphanumériques Notez qu'il correspond également si.

+0

Bonjour Benoit, merci pour votre réponse, mais cela ne fonctionne pas pour moi. J'ai essayé: regex: "^. * (? =. * \ W) (? = (. * \ W) {7}). * $" Mais il ne semble pas correspondre aux mots de passe auxquels je m'attendais, comme Password1 ! – user787427

+0

Si vous utilisez regex_match et non regex_search, ajoutez '. *' À la fin du modèle (et supprimez '^') – Benoit

+0

c'est waht j'utilise: $ .validator.addMethod ( "regex", fonction (valeur, ! élément, regexp) { if (regexp.constructor = regExp) = new regExp regexp (regexp); else if (regexp.global) regexp.lastIndex = 0; this.optional retour (élément) || regexp .test (value); }, "L'entrée ne correspond pas à l'exigence de complexité" \t); – user787427

0

Comme un bon outil pour tester rapidement les expressions régulières, je suggère http://regexpal.com/ (aucune relation;)). Parfois, simplifier votre expression aide beaucoup.

alors vous pourriez vouloir essayer quelque chose comme ^[[email protected]#$!%^&+=]{7,}$

Update 2 maintenant, y compris les chiffres

^.*(?=.{7,})(?=.*\d)(?=.*[a-zA-Z])(?=.*[@#$%^&+=!]).*$

Cela correspond à:

  • Stmarysh3sptal !, password1 !, PASSWORD1P !!!!!! @ # ^^ ASSWORD1, 122ss12 1a212 !!

... mais pas:

  • Password1, PASSWORD1PASSWORD1, MOT DE PASSE !, Mot de passe !, 1221121212 !! etc
+0

Salut Brian, cette regex correspond mot de passe comme "Mot de passe" J'ai besoin d'eux pour utiliser atleast 1 caractère spécial – user787427

+0

Je viens de voir que vous voulez au moins un caractère spécial. Eh bien si le ci-dessus ne correspond pas à vos besoins, je suppose ... – Brian

+0

édité 2ème essai, on dirait que ça fonctionne (au moins quand je l'essaie ;-)) – Brian

0

Essayez cette regex:

\S*[@#$!%^&+=]+\S*(?<=\S{7,}) 

EDIT3: Ok, c'est la dernière modification;).

Cela correspond également à d'autres caractères spéciaux. Donc, si vous ne voulez pas limiter le nombre de caractères valides, modifiez \S à la plage de tous les caractères valides.

0

La raison pour laquelle il correspond Password1! mais pas PASSWORD1! est cette clause :

(?=.*[a-z]) 

Cela nécessite au moins une lettre minuscule dans le mot de passe. Le modèle indique que le mot de passe doit comporter au moins 7 caractères et contenir à la fois des majuscules et des minuscules, au moins un chiffre et au moins l'un des @#$!%^&+=. PASSWORD1! échoue car il n'y a pas de lettres minuscules dedans.

Le deuxième modèle accepte PASSWORD1! car il s'agit d'une exigence de mot de passe beaucoup plus faible. Tout ce qu'il faut, c'est que le mot de passe soit 7+ caractères et qu'il y ait au moins un caractère spécial (autre que _). Le {1,} est inutile, d'ailleurs.

Si j'étais vous, j'éviterais d'affaiblir le mot de passe et de le laisser tel quel. Si je voulais permettre à tous les mots de passe en minuscules ou en majuscules tout pour une raison quelconque, je voudrais simplement changer à

^(?=.*\d)(?=.*[a-zA-Z])(?=.*[@#$!%^&+=]).{7,}$ 

... donc pas affaiblir les exigences de mot de passe plus que ce que je devais.