Сводка регулярных выражений (JavaScript) для надежности пароля

внешний интерфейс JavaScript модульный тест регулярное выражение

Кратко

В этой статье представлены две схемы регулярных выражений для определения надежности пароля: одна простая, а другая более сложная и безопасная. Процедуры анализа и тестирования двух схем приведены соответственно. Как правило, вы можете определить свое собственное стандартное соглашение о пароле в соответствии с фактическими потребностями вашего проекта.

密码强度

предисловие

При регистрации пользователя используется обычная проверка пароля. Чтобы написать правильные регулярные выражения, мы должны сначала определить правила выражения.

Вариант 1 (простой)

Предположим, что аутентификация по паролю определяется следующими правилами:

  • Минимум 6, 6, 16} {16 вверх
  • Может содержать строчные буквы [a-z] и прописные буквы [A-Z]
  • Может содержать числа [0-9]
  • Может содержать символы подчеркивания [_] и знаки минус [-]

В соответствии с приведенными выше правилами легко дать правильное буквальное определение следующим образом:

var pattern = /^[\w_-]{6,16}$/;

Сценарий 1 Анализ

буквальный / /

Литералы регулярных выражений определяются как символы, заключенные между парой косых черт (/), например:

var pattern = /s$/;

Приведенный выше литерал соответствует всем строкам, оканчивающимся на букву «s».

класс персонажей [ ]

Классы символов формируются путем заключения символов в квадратные скобки. Класс символов может соответствовать любому символу, который он содержит. Следовательно, регулярное выражение/[abc]/Он соответствует любой из букв «a», «b» и «c».

Классы символов могут использовать дефисы для обозначения диапазонов символов. Чтобы соответствовать строчным латинским буквам, вы можете использовать/[a-z]/.

класс символов \w

класс персонажей\wСоответствует любому слову, состоящему из символов ASCII, эквивалентному [a-zA-Z0-9].

[\w_-]Указывает на совпадение с любыми латинскими прописными и строчными буквами, цифрами, символами подчеркивания и минусами.

повторить {}

В регулярных выражениях используйте { } для представления количества повторений элемента.

  • {n,m}Совпадение с предыдущим элементом не менее n раз, но не более m раз
  • {n,}соответствует предыдущему элементу n или более раз
  • {n}соответствует предыдущему элементу n раз

[\w_-]{6,16}Указывает на совпадение с любыми латинскими прописными и строчными буквами, цифрами, символами подчеркивания и минусами, которые появляются не менее 6 раз и не более 16 раз.

позиция совпадения

  • ^ соответствует началу строки, при многострочном поиске соответствует началу строки
  • $ соответствует концу строки, при многострочном поиске соответствует концу строки

/^\w/Соответствует строкам, начинающимся с прописной или строчной буквы или цифры.

Сценарий 1 тест

Результаты испытаний представлены следующим образом:

var pattern = /^[\w_-]{6,16}$/;
pattern.test('123456') = true;
pattern.test('-ifat33') = true;
pattern.test('42du') = false;
pattern.test('du42du42du42du421') = false;
pattern.test('42du42@') = false;

Посмотреть исходный код

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

Сценарий 2 (Безопасность)

Предположим, что аутентификация по паролю определяется следующими правилами:

  • Минимум 6 бит, максимум 16 бит {6,16}
  • должен содержать 1 число
  • Должен содержать 2 строчные буквы
  • Должен содержать 2 заглавные буквы
  • Должен содержать 1 специальный символ

В соответствии с приведенными выше правилами легко дать правильное буквальное определение следующим образом:

var pattern = /^.*(?=.{6,16})(?=.*\d)(?=.*[A-Z]{2,})(?=.*[a-z]{2,})(?=.*[!@#$%^&*?\(\)]).*$/;

Сценарий 2 Анализ

класс персонажа.

Класс символов . представляет любой символ, кроме символов новой строки и других разделителей строк Unicode.

положительное прогнозное утверждение(?= )

Помещение выражения между символами "(?=" и ")" является предварительным утверждением, что выражение в скобках должно совпадать правильно. Например:/Java(?=\:)/Соответствует только Java, за которой следует двоеточие.

(?=.*[!@#$%^&*?\(\)])

Предварительное утверждение указывает, что должен быть включен специальный символ. 10 специальных символов в приведенном выше выражении — это символы клавиши Shift на клавиатуре 1,2...0, также могут быть добавлены другие специальные символы. Примечание. Если добавленный символ имеет особое значение в регулярном выражении, его необходимо экранировать обратной косой чертой (\) перед символом.

Сценарий 2 тест

Результаты испытаний представлены следующим образом:

var pattern = /^.*(?=.{6,16})(?=.*\d)(?=.*[A-Z]{2,})(?=.*[a-z]{2,})(?=.*[!@#$%^&*?\(\)]).*$/;
pattern.test('du42DU!') = true;
pattern.test('duDUd!') = false;
pattern.test('42dud!') = false;
pattern.test('42DUD!') = false;
pattern.test('42duDU') = false;
pattern.test('42duU(') = false;
pattern.test('42dUU!') = false;

Посмотреть исходный код

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

Оригинальная ссылка