2013-07-11 3 views
0

Я ищу в использовании индикатор силы пароля jQuery и нашел тот, который выглядит подходящим.Javascript regexp character matching

Это увеличивает счет силы пароля, если обнаруженные специальные символы:

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

Однако я хотел бы, чтобы иметь возможность указать дополнительные специальные символы и потому, что эти списки специальных символов используются в нескольких местах, я Не рекомендуется указывать только один раз:

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

Возможно ли это?

+0

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

+0

Не вижу использование JQuery здесь. Конечно, вы можете определить список где-то в глобальном масштабе. Используйте list.join (""), чтобы получить сериализованный список символов. – Tommi

ответ

3

Вы можете использовать строки:

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

(Обратные косые черты нарисуй с-экранирует специальные символы, поэтому они рассматриваются буквально с помощью двигателя регулярных выражений.)

0

Вам не нужно, чтобы отделить символы от , в регулярных выражениях:

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

, вы также должны избегать значимых символов, таких как '?' ... например. '/ [\? \!] /' – Tim

+0

вы также не можете вставлять переменные в строки, такие как '' list "' в JS, их нужно объединить. Извините, я думаю, что я тот парень – Tim

+0

@ Тим, да, это был мой замораживающий мозг, спасибо – mishik

2

Да, если вы используете RegExp() constructor, вы можете передать строку в виде регулярного выражения.

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

Зачем вам регулярное выражение?

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

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

FIDDLE