Проверка регулярных выражений в Laravel 5.2

Ниже мое правило для пароля:

return [
    'Password'                  => 'required|min:8|max:100|regex:[a-z{1}[A-Z]{1}[0-9]{1}]',
    'Password_confirmation'     => 'required|min:8|max:100|regex:[a-z{1}[A-Z]{1}[0-9]{1}]',
];

Я пытаюсь добавить правило, чтобы оно должно было

  1. хотя бы один маленький символ
  2. хотя бы один большой символ
  3. хотя бы один номер
  4. хотя бы один специальный символ
  5. минимум 8 символов

Я попробовал это, и оно работает required|confirmed|min:8|max:100|regex:/^[\w]{1,}[\W]{1,}$/ на программном обеспечении для тестирования регулярных выражений . но не уверен, почему это не работает в Laravel

Я что-то упускаю ?


person Pankaj    schedule 15.01.2016    source источник


Ответы (2)


Использовать:

return [
    'password' => [
        'required',
        'confirmed',
        'min:8',
        'max:50',
        'regex:/^(?=.*[a-z|A-Z])(?=.*[A-Z])(?=.*\d)(?=.*(_|[^\w])).+$/',
    ]
];

Во-первых, вам не нужно отдельно проверять подтверждение. Просто используйте правило confirmed.

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

Из-за того, что в приведенном выше выражении используются конвейеры (|), вы можете указать правила с помощью массива.

Изменить. Вы также можете использовать это выражение, которое, по-видимому, было протестировано более тщательно.

/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/
person Mike Rockétt    schedule 15.01.2016
comment
Установка низкого ограничения на количество символов, которые пользователь может использовать в своем пароле, может привести к ухудшению взаимодействия с пользователем, особенно когда пользователь использует менеджер паролей, который генерирует пароли, превышающие 20 символов, или он хочет использовать фразу в качестве своего пароля. - person ; 15.10.2016

Вы можете проверить PasswordStrengthPackage. Он регистрирует новые правила проверки, которые делают то, что вам нужно, и гораздо более читабельны, чем регулярное выражение. Итак, в вашем случае вы можете иметь это:

return [
    'Password' => 'required|min:8|max:100|case_diff|numbers|letters|symbols|confirmed'
];

Правило Password_confirmation не требуется, если присутствует значение подтверждения и вы добавляете confirmed правило для поля Password.

person Bogdan    schedule 17.01.2016