Проверка регулярных выражений в 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}]',
];
Я пытаюсь добавить правило таким образом, чтобы оно должно было иметь
- по крайней мере один маленький символ
- по крайней мере один большой символ
- по крайней мере одно число
- по крайней мере один специальный символ
- минимум 8 символов
Я попробовал это, и это работает required|confirmed|min:8|max:100|regex:/^[\w]{1,}[\W]{1,}$/
, на программном обеспечении для тестирования регулярных выражений . но не уверен, почему это не работает в Laravel
Я что-то упускаю ?
2 answers
Использование:
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])(?=.*[!$#%]).*$/
Возможно, вам захочется проверить Пакет паролей . Он регистрирует новые правила проверки, которые делают то, что вам нужно, и гораздо более удобочитаемы, чем регулярное выражение. Так что в вашем случае у вас может быть это:
return [
'Password' => 'required|min:8|max:100|case_diff|numbers|letters|symbols|confirmed'
];
Правило Password_confirmation
не требуется, пока присутствует значение подтверждения и вы добавляете confirmed
правило для поля Password
.