Подтвердить что ты не робот

Проверка правильности в 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}]',
];

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

  • по крайней мере один маленький char
  • по крайней мере один большой char
  • по крайней мере одно число
  • по крайней мере один специальный char
  • min 8 символов

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

Я что-то пропустил?

4b9b3361

Ответ 1

Использование:

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])(?=.*[!$#%]).*$/

Ответ 2

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

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

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