web-dev-qa-db-fra.com

Règle de validation du mot de passe Laravel

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:

  • Caractères majuscules anglais (A - Z)
  • Caractères anglais minuscules (a - z)
  • Base 10 chiffres (0 - 9)
  • Non alphanumérique (par exemple:!, $, # Ou%)
  • Caractères Unicode

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);

    }
25
Bharanikumar

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:

  • Caractères majuscules anglais (A - Z)
  • Caractères anglais minuscules (a - z)
  • Base 10 chiffres (0 - 9)
  • Non alphanumérique (par exemple:!, $, # Ou%)
  • Caractères Unicode

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: 

  1. Je l’ai testée et validée à la fois sur le site d’expression régulière et dans un environnement de test Laravel 5 et c’est efficace.
  2. J'ai utilisé min: 6, c'est facultatif, mais il est toujours bon de disposer d'une politique de sécurité qui reflète différents aspects, dont l'un est la longueur minimale du mot de passe.
  3. Je vous suggère d'utiliser un mot de passe confirmé pour vous assurer que l'utilisateur saisit un mot de passe correct. 
  4. Dans les 6 caractères, notre expression rationnelle doit contenir au moins 3 caractères a-z ou A-Z, ainsi que des chiffres et des caractères spéciaux.
  5. Testez toujours votre code dans un environnement de test avant de passer en production.
  6. Mise à jour: Ce que j'ai fait dans cette réponse n'est qu'un exemple de mot de passe regex

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:

82

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:

http://www.regular-expressions.info/unicode.html

3
Matthew Way

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)

0
James