Кратко
В этой статье представлены две схемы регулярных выражений для определения надежности пароля: одна простая, а другая более сложная и безопасная. Процедуры анализа и тестирования двух схем приведены соответственно. Как правило, вы можете определить свое собственное стандартное соглашение о пароле в соответствии с фактическими потребностями вашего проекта.
предисловие
При регистрации пользователя используется обычная проверка пароля. Чтобы написать правильные регулярные выражения, мы должны сначала определить правила выражения.
Вариант 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;
Как видно из приведенных выше тестов, пароль достаточно надежный и безопасный. Вы можете настроить приведенные выше регулярные выражения в соответствии с потребностями вашего проекта.