Используйте регулярные выражения для проверки паролей - PullRequest
1 голос
/ 01 мая 2011

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

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

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

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

Спасибо

Ответы [ 2 ]

5 голосов
/ 01 мая 2011

Минимальное и максимальное значения просто используйте 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('#[a-z]#i', $string)) {
     // does not have a character
} 

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

4 голосов
/ 01 мая 2011

Регулярные выражения - очень хороший инструмент для проверки пароля.Несколько правил могут быть применены с использованием проверочных утверждений (которые работают с использованием логики 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
}

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

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

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

Счастливое регулярное выражение!

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