Regex javascript pour un minimum de 8 caractères, au moins un nombre et un caractère spécial, maximum 32 caractères

Je veux un regex qui vérifie "Minimum de 8 caractères au moins un nombre et un caractère spécial, maximum 32 caractères". , My regex est:

^(?=.*\d)(?=.*[a-zA-Z])[0-9a-zA-Z]{8,16}$ 

Je teste que cette regex peut être satisfaite

 /(?=^.{8,32}$)(?=(?:.*?\d){1})(?=.*[az])(?=(?:.*?[!@#$%*()_+^&}{:;?.]){1})(?!.*\s)[0-9a-zA-Z!@#$%*()_+^&]*$/ 

Vous pouvez regarder la démonstration en direct: http://jsfiddle.net/tuxrM/

 var re = new RegExp(/(?=^.{8,32}$)(?=(?:.*?\d){1})(?=.*[az])(?=(?:.*?[!@#$%*()_+^&}{:;?.]){1})(?!.*\s)[0-9a-zA-Z!@#$%*()_+^&]*$/); var test1 = '1234567', // less than 8 characters test2 = 'aaaaaaaa', // no number & no special character test3 = 'aaaaaaa1', // no special character test4 = 'aaaAaa#1', // satisfied test5 = 'abcdefghigklmnopqrstuvwxyz1234567890332123'; // more than 32 characters re.test(test1); // FALSE re.test(test2); // FALSE re.test(test3); // FALSE re.test(test4); // TRUE re.test(test5); // FALSE 

C'est en fait mieux résolu par 3 expressions régulières différentes.

 /[0-9]/ //Check for at least one number. /(SPECIAL CHARACTER)/ //Check for at least one special character. Please define "special" character. 

Et alors

 str.length >= 8 && str.length <= 32 

S'il s'agit d'un mot de passe, ne limitez pas vos utilisateurs à la longueur du mot de passe.