2013-07-11 4 views
0

Je cherche dans l'aide d'un indicateur de force de mot de passe jQuery et en ai trouvé un qui semble approprié.Javascript regexp caractère correspondant

Il augmente le score de force de mot de passe si les caractères spéciaux sont détectés:

if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)){ score += 5 ;} 

Cependant, je voudrais être en mesure de spécifier des caractères spéciaux supplémentaires et parce que ces listes de caractères spéciaux sont utilisés dans plusieurs endroits, je J'aimerais spécifier la liste une seule fois:

list = array(!,@,#,$,%,^,&,*,?,_,~,[,],{,},(,)); 
if (password.match(/(.*[list].*[list])/)){ score += 5 ;} 

Est-ce possible?

+0

http://stackoverflow.com/questions/11596556/using-dropboxs-zxcvbn-password-strength-estimator/11596627#11596627 – sabithpocker

+0

tu ne vois pas l'utilisation de jQuery ici. Bien sûr, vous pouvez définir une liste quelque part dans le monde. Utilisez list.join ("") pour obtenir la liste des caractères sérialisés. – Tommi

Répondre

3

Vous pouvez utiliser des chaînes:

var special = "[email protected]#$%^&*?_~[]{}()".split('').join('\\'); 
if (password.match(new RegExp("(.*[" + special + "].*[" + special + "])")))... 

(la jonction avec slashes échappe les caractères spéciaux afin qu'ils soient traités littéralement par le moteur regex.)

0

Vous n'avez pas besoin de séparer les caractères par , dans regex:

var list = "[\\[email protected]#\\$%\\^&\\*\\?_~]"; 
var your_regex = new RegExp(".*" + list + ".*" + list); 
if (your_regex.test(password)){ 
    score += 5; 
} 
+0

vous devriez également échapper à des symboles significatifs, tels que '?' ... par exemple. '/ [\? \!] /' – Tim

+0

vous ne pouvez pas non plus incorporer des variables dans des chaînes comme '" list "' dans JS, elles doivent être concaténées. Désolé, je suppose que je suis ce type – Tim

+0

@Tim, ouais c'était mon gel du cerveau temp, merci – mishik

2

Oui, si vous utilisez le RegExp() constructor, vous pouvez passer une chaîne comme regexp.

var list = ['\\!', '\\@', '\\#', '\\%']; 
var reg = new RegExp('(.*['+ list.join(',') + '].*['+ list.join(',') +'])'); 
if (reg.test("MySuperPassword!#_123")) { 
    score += 5; 
} 
0

Pourquoi auriez-vous besoin d'une regex?

var list = ['!','@','#','$','%','^','&','*','?','_','~','[',']','{','}','(',')'], 
    score = 0; 

for (var i=list.length;i--;) { 
    if (password.indexOf(list[i])) score++; 
} 

FIDDLE