Comment ajouter une règle de validation de mot de passe dans le validateur?
Règle de validation:
Le mot de passe contient des caractères d'au moins trois des cinq catégories suivantes:
Comment ajouter la règle ci-dessus dans la règle du validateur?
Mon code ici
// create the validation rules ------------------------
$rules = array(
'name' => 'required', // just a normal required validation
'email' => 'required|email|unique:ducks', // required and must be unique in the ducks table
'password' => 'required',
'password_confirm' => 'required|same:password' // required and has to match the password field
);
// do the validation ----------------------------------
// validate against the inputs from our form
$validator = Validator::make(Input::all(), $rules);
// check if the validator failed -----------------------
if ($validator->fails()) {
// get the error messages from the validator
$messages = $validator->messages();
// redirect our user back to the form with the errors from the validator
return Redirect::to('home')
->withErrors($validator);
}
J'ai eu un scénario similaire à Laravel et je l'ai résolu de la manière suivante.
Le mot de passe contient des caractères d'au moins trois des cinq catégories suivantes:
Premièrement, nous devons créer une expression régulière et la valider.
Votre expression régulière ressemblerait à ceci:
^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\x])(?=.*[!$#%]).*$
Je l'ai testé et validé sur this site. Pourtant, effectuez les vôtres à votre façon et ajustez en conséquence. Ceci est seulement un exemple de regex, vous pouvez le manipuler comme vous le souhaitez.
Donc votre code final de Laravel devrait être comme ceci:
'password' => 'required|
min:6|
regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/|
confirmed',
Update Comme le mentionne @NikK dans le commentaire, dans Laravel 5.6, la valeur du mot de passe doit être encapsulée dans un tableau.
'password' => ['required',
'min:6',
'regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/',
'confirmed']
Je ne l’ai pas testé sur Laravel 5.6, je fais donc confiance à @NikK et j’ai donc décidé de travailler avec c #/.net ces derniers temps et j’ai peu de temps pour Laravel.
Remarque:
Quelques références en ligne
En ce qui concerne votre message de validation personnalisé pour la règle regex dans Laravel, voici quelques liens à consulter:
Cela semble être un bon travail pour les expressions régulières.
Les règles de validation Laravel prennent en charge les expressions régulières. Les versions 4.X et 5.X le prennent en charge:
Cela pourrait aider aussi:
Cela ne correspond pas tout à fait aux exigences du PO, bien que cela aide, espérons-le. Avec Laravel, vous pouvez définir vos règles dans un format facile à gérer, comme ceci:
$inputs = [
'email' => 'foo',
'password' => 'bar',
];
$rules = [
'email' => 'required|email',
'password' => [
'required',
'string',
'min:10', // must be at least 10 characters in length
'regex:/[a-z]/', // must contain at least one lowercase letter
'regex:/[A-Z]/', // must contain at least one uppercase letter
'regex:/[0-9]/', // must contain at least one digit
'regex:/[@$!%*#?&]/', // must contain a special character
],
];
$validation = \Validator::make( $inputs, $rules );
if ( $validation->fails() ) {
print_r( $validation->errors()->all() );
}
Serait sortie:
[
'The email must be a valid email address.',
'The password must be at least 10 characters.',
'The password format is invalid.',
]
(Les règles regex partagent un message d'erreur par défaut: quatre règles de regex défaillantes donnent lieu à un message d'erreur)