2015-03-26 2 views
0

Я пытаюсь установить параметры пароля длиной 8-20 символов, по крайней мере, один символ верхнего регистра, номер и символ. Я написал код, как напримерПараметры пароля с использованием preg_match

(preg_match ('/^(\W+)(\d+)([A-Z]+)([a-z]+){8,20}$/', $_POST['pass1'])) 

Моя интерпретация моего кода выглядит следующим образом:

W+ one or more symbols (non alpha numeric) 
d+ one or more numbers 
[A-Z]+ one or more uppercase characters 
[a-z]+ one or more lower case characters 
{8,20} string length min 8 max 20 

Когда я ввожу пароль, Anyhelp4me! Я получаю неверное сообщение пароля. Каковы ваши предложения.

+0

И интерпретация regex101: https://regex101.com/r/fR4xG1/1 – Rizier123

+0

Какова цель ограничения длины пароля? Имеет ли пароль в 21 символ безопасности грех или что? – zerkms

ответ

2

Не делайте все с одним регулярным выражением. В будущем это будет гораздо более удобным, понятным и простым в использовании, если вы сделаете несколько вызовов preg_match с несколькими регулярными выражениями.

$password_is_ok = 
    preg_match('/\W/', $pass) && 
    preg_match('/\d/', $pass) && 
    preg_match('/[a-z]/', $pass) && 
    preg_match('/[A-Z]/', $pass) && 
    strlen($pass) >= 8 && 
    strlen($pass) <= 20; 

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

+1

Отличное предложение ... это более «читаемый» и понятный – Learner

0

Хорошо ... Я попробовал предыдущую рекомендацию и наложил только ограничение «8,10». Я нашел это на StackOverflow «Создание preg_match для пароля проверки, позволяющего (@ # $%!)» И модифицировал код, представленный в этой реакции следующим образом:

/^(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*\W)[[email protected]#$%]{8,20}$/ 

Я испытал это несколько раз, и это работает. Вы должны иметь по крайней мере одну цифру, один верхний регистр, один нижний регистр и указанный символ (! @ # $%) И от 8 до 20 символов.

Смежные вопросы