Создание массива регулярных выражений Javascript
Я хочу создать функцию, которая сравнивает пароль с некоторыми обычно идиотскими, так что пользователь не может выбрать один из них, но функция, которую я написал до сих пор, когда помещен между тегами script, не вызывает javascript для распознавания (Firebug). Я предполагаю, что создание массива виновато.
function unacceptable(pwd){
var unforgivable = [
/password/gi, /*g matches any occurance of sequence, i checks case insensitive*/
/12345678/g,
/8675309/g,
/[a-z]{8,}/gi,
/qwerty/gi,
/asdfg/gi,
/qazwsx/gi,
/zxcvb/gi,
/letmein/gi,
/trustno1/gi,
/omnicloud/gi,
/monkey/gi];
for (var i=0; i<unforgivable.length; i++)
if(pwd.match(unforgivable[i])) return true;
return false;
}
Ответы
Ответ 1
Вам не нужен цикл для проверки каждого слова, поскольку вы можете поместить их все в одно регулярное выражение (разделенное символом |
), и пусть механизм регулярных выражений будет искать любой из них сразу. Вы можете сделать это вот так:
function unacceptable(pwd){
var unforgivable = [
"password",
"12345678",
"8675309",
"[a-z]{8,}",
"qwerty",
"asdfg",
"qazwsx",
"zxcvb",
"letmein",
"trustno1",
"omnicloud",
"monkey"
];
var re = new RegExp(unforgivable.join("|"), "i");
return re.test(pwd);
}
Рабочая демонстрация здесь: http://jsfiddle.net/jfriend00/cyVbC/
P.S. Вам не нужно вставлять все слова в массив. Вы могли бы просто предварять все регулярное выражение, но я думал, что они помещают их в массив, как это сделано для более удобного для чтения кода.
Он также может быть следующим:
var unforgivable = /password|12345678|8675309|[a-z]{8,}|qwerty|asdfg|qazwsx|zxcvb|letmein|trustno1|omnicloud|monkey/i;
function unacceptable(pwd){
return unforgivable.test(pwd);
}
Ответ 2
Мне нравится использовать Array.some
, который прекратит итерацию через массив, как только одно возвращаемое значение будет истинным:
function unacceptable(pwd){
return [
/password/gi,
/12345678/g,
/8675309/g,
/[a-z]{8,}/gi,
/qwerty/gi,
/asdfg/gi,
/qazwsx/gi,
/zxcvb/gi,
/letmein/gi,
/trustno1/gi,
/omnicloud/gi,
/monkey/gi
].some(function(regexp){
return regexp.test(pwd);
});
}
Ответ 3
У вас есть конечная запятая. Вы не можете использовать запятую в javascript.
var unforgivable = new Array(
/password/gi, /*g matches any occurance of sequence, i checks case insensitive*/
/12345678/g,
/8675309/g,
/[a-z]{8,}/gi,
/qwerty/gi,
/asdfg/gi,
/qazwsx/gi,
/zxcvb/gi,
/letmein/gi,
/trustno1/gi,
/omnicloud/gi,
/monkey/gi
)
Ответ 4
Нашел это, ища что-то еще, и, как никто другой не упомянул об этом, нужно упомянуть. Вы не должны использовать черные списки как средство обеспечения надежных паролей. Это отверстие для обслуживания и приводит к более плохим паролям, которых нет в вашем списке. Вместо этого применяйте надежные политики паролей.
P4ssw0rd! будет проходить многие сильные стратегии psuedo, но потребуется несколько секунд, чтобы взломать.
Единственным эффективным черным списком является включение всех списков слов и комбинационных скриптов, используемых методами дешифрования, это означает, что пользователи ждут минуты/часы/дни, чтобы проверить, достаточно ли их пароль.
Я знаю, что это не отвечает на конкретный вопрос, но он пытается советоваться о том, что такое и не является эффективной проверкой пароля.