Below is my rule for password:
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}]',
];
I am trying to add the rule such that it must have
- atleast one small char
- atleast one big char
- atleast one number
- atleast one special char
- min 8 chars
I tried this and it works required|confirmed|min:8|max:100|regex:/^[\w]{1,}[\W]{1,}$/, on a regex tester software . but not sure why it does not work in Laravel
Am I missing something ?
Use:
return [
'password' => [
'required',
'confirmed',
'min:8',
'max:50',
'regex:/^(?=.*[a-z|A-Z])(?=.*[A-Z])(?=.*\d)(?=.*(_|[^\w])).+$/',
]
];
Firstly, you do not need to check the confirmation separately. Just use the confirmed rule.
The expression you were using was invalid, and had nothing to do with what you wanted. I do suggest you do some research on regular expressions.
Due to the fact that the expression shown above uses pipes (|), you can specify the rules using an array.
Edit: You could also use this expression, which appears to have been tested a little more thoroughly.
/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/
You might want to check the PasswordStrengthPackage. It registers new validation rules that do what you need and are much more readable than a regular expression. So in your case you can have this:
return [
'Password' => 'required|min:8|max:100|case_diff|numbers|letters|symbols|confirmed'
];
The Password_confirmation rule is not needed as long as the confirmation value is present and you add the confirmed rule for the Password field.
来源:https://stackoverflow.com/questions/34804290/regex-validation-in-laravel-5-2