Проверка правильности в 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
Я что-то пропустил?
Ответы
Ответ 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
.