Подтвердить что ты не робот

Создание массива регулярных выражений 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;
} 
4b9b3361

Ответ 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, но потребуется несколько секунд, чтобы взломать.

Единственным эффективным черным списком является включение всех списков слов и комбинационных скриптов, используемых методами дешифрования, это означает, что пользователи ждут минуты/часы/дни, чтобы проверить, достаточно ли их пароль.

Я знаю, что это не отвечает на конкретный вопрос, но он пытается советоваться о том, что такое и не является эффективной проверкой пароля.