Использовать регулярные выражения для проверки паролей

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

  1. должен иметь по крайней мере одну букву и одну цифру
  2. должна иметь минимальную длину 5 и максимальную длину 20

Кроме того, я хотел бы знать, являются ли регулярные выражения одинаковыми для всех языков?

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

спасибо

В min и max используется только strlen .

Один символ и одна цифра я бы использовал preg_match :

 $len = strlen($string); if ($len < 5) { // too short }elseif ( $len > 20) { // too long. }elseif (!preg_match('#[0-9]#', $string)) { // does not contain a digit }elseif (!preg_match('#[az]#i', $string)) { // does not have a character } 

Мне нравится разбивать мой код на несколько проверок, чтобы я мог точно сказать, чего не хватает. Некоторые люди предпочитают, чтобы он был включен в один.

Регулярные выражения – очень хороший инструмент для проверки пароля. Несколько правил могут применяться с использованием утверждений lookahead (которые работают с использованием логики AND ), применяемых с начала строки, например:

 $re = '/ # Match password with 5-20 chars with letters and digits ^ # Anchor to start of string. (?=.*?[A-Za-z]) # Assert there is at least one letter, AND (?=.*?[0-9]) # Assert there is at least one digit, AND (?=.{5,20}\z) # Assert the length is from 5 to 20 chars. /x'; if (preg_match($re, $text)) { // Good password } 

Вот эквивалент Javascript:

 var re = /^(?=.*?[A-Za-z])(?=.*?[0-9])(?=.{5,20}$)/; if (re.test(text)) { // Good password } 

Хорошей статьей относительно проверки пароля с помощью регулярного выражения является: Проверка прочности пароля с помощью регулярных выражений . (Хотя его окончательные выражения включают в себя ошибочную точку-звезду в начале – см. Мой комментарий к его блогу).

Также обратите внимание, что синтаксис regex отличается от языка к языку (но большинство из них сходится в синтаксисе Perl). Если вы действительно хотите знать регулярное выражение (в смысле Neo: «Я знаю Kung-Fu» ), тогда нет лучшего способа, чем сесть и прочитать: Освоение регулярных выражений (3-е издание) Джеффри Фридл.

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

Счастливое regexing!