регулярное выражение javascript для пароля, содержащего не менее 8 символов, 1 число, 1 верхний и 1 нижний регистр [дубликат]



этот вопрос уже есть ответ здесь:




  • Регулярное выражение пароля с минимальными 6 символами, по крайней мере одной буквой и одной цифрой и может содержать специальные символы

    5 ответов



Я пытаюсь написать регулярное выражение для проверки пароля, который должен соответствовать следующим критериям:




  • содержать не менее 8 символов

  • содержат по крайней мере 1 число

  • содержит по крайней мере 1 строчный символ (a-z)

  • содержит по крайней мере 1 заглавный символ (A-Z)

  • содержит только 0-9a-zA-Z


я попробовал следующий но она не работает.



http://jsfiddle.net/many_tentacles/Hzuc9/



<input type='button' value='click' class='buttonClick' />
<input type='text' />
<div></div>


и...



$(".buttonClick").click(function () {

if ($("input[type=text]").filter(function () {
return this.value.match(/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])([a-zA-Z0-9]{8})$/);
})) {
$("div").text("pass");
} else {
$("div").text("fail");
}

});


какие идеи?

845   4  

4 ответов:

ваше регулярное выражение должно выглядеть так:

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

вот объяснение:

/^
  (?=.*\d)          // should contain at least one digit
  (?=.*[a-z])       // should contain at least one lower case
  (?=.*[A-Z])       // should contain at least one upper case
  [a-zA-Z0-9]{8,}   // should contain at least 8 from the mentioned characters
$/

использование отдельных регулярных выражений для проверки различных частей было бы значительно проще, чем пытаться получить одно регулярное выражение для покрытия всех из них. Это также упрощает добавление или удаление критериев проверки.

обратите внимание, что ваше использование .filter() было неверно; он всегда будет возвращать объект jQuery (который считается истинным в JavaScript). Лично я бы использовал .each() цикл для итерации по всем входам и отчета об отдельном проходе / сбое статусы. Что-то вроде ниже:

$(".buttonClick").click(function () {

    $("input[type=text]").each(function () {
        var validated =  true;
        if(this.value.length < 8)
            validated = false;
        if(!/\d/.test(this.value))
            validated = false;
        if(!/[a-z]/.test(this.value))
            validated = false;
        if(!/[A-Z]/.test(this.value))
            validated = false;
        if(/[^0-9a-zA-Z]/.test(this.value))
            validated = false;
        $('div').text(validated ? "pass" : "fail");
        // use DOM traversal to select the correct div for this input above
    });
});

рабочая демо

ваше регулярное выражение позволяет только ровно 8 символов. Используйте {8,} чтобы указать восемь или более вместо {8}.

но почему бы вам ограничить допустимый диапазон символов для ваших паролей? 8-символьные буквенно-цифровые пароли могут быть bruteforced по my телефон в течение нескольких минут.

по крайней мере, 8 = {8,}:

str.match(/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])([a-zA-Z0-9]{8,})$/)

Comments

    Ничего не найдено.