2016-01-05 1 views
1

j'ai besoin de validation de mot de passe commevalidation de mot de passe dans Laravel

1 English uppercase characters (A – Z) 
2 English lowercase characters (a – z) 
3 Base 10 digits (0 – 9) 
4 Non-alphanumeric (For example: !, $, #, or %) 
5 Unicode characters 

J'ai appliqué un code, mais le résultat est que je reçois une erreur. Je pense que regex que j'ai utilisé dans le mauvais format. S'il vous plaît vérifier mon code et corrigez-moi. Merci

AuthController.php

protected function validator(array $data) 
    { 
     return Validator::make($data, [ 
      'firstname' => 'required|max:255', 
      'lastname' => 'required|max:255', 
      'email' => 'required|email|max:255|unique:users', 
      'password' => 'required| 
          regex:array("/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/")| 
          min:8| 
          confirmed', 
     ]); 
    } 
+0

Essayez ['regex: array ('/^(? = [^ Az] * [az]) (? = [^ AZ] * [AZ]) (? = [^ 0-9] * [0- 9]) (? = [^! $ #%] * [! $ #%]). * $/') '] (Https://regex101.com/r/xC2kT6/1). Cette regex nécessite tous les 1-4 points et permet le point 5 (tous les caractères). –

+0

@stribizhev J'ai essayé mais j'ai eu une erreur "ErrorException dans la ligne Validator.php 1343: preg_match(): Le délimiteur ne doit pas être alphanumérique ou backslash" –

+0

Ensuite, utilisez simplement un autre délimiteur: 'regex: array ('~^(? [^ az] * [az]) (? = [^ AZ] * [AZ]) (? = [^ 0-9] * [0-9]) (? = [^! $ #%] * [! $ #%]). * $ ~ '' –

Répondre

0

Le validateur Regex prend une chaîne regex, mais vous passez en tant que tableau.

Essayez de changer votre code

regex:array("/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/") 

à

regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/ 

Aussi, regardez @vks réponse. Son expression rationnelle semble plus claire.

P.S. Lorsque vous utilisez le modèle regex, il peut être nécessaire de spécifier des règles dans un tableau au lieu d'utiliser des délimiteurs de canal, en particulier si l'expression régulière contient un caractère de canal.

Si le tuyau (|) soupir est disponible dans votre modèle d'expression régulière, il pourrait entrer en conflit avec le séparateur.

0
^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).{3,}$ 

Cela devrait le faire pour vous.

+0

Merci. ajouté ceci dans regex: array ("^ (? =. * [a-zA-Z]) (? =. * [0-9]) (? =. * [\ d \ X]) (? =. * [! $ #%]). {3,} $ ") mais montrant une erreur" preg_match(): Le délimiteur ne doit pas être alphanumérique ou backslash " –

+0

@samsam vous avez manqué le' delimiter' use '/' aux deux extrémités – vks

+0

Code mis à jour mais affichant toujours une erreur regex: array ("/^(? =. * [a-zA-Z]) (? =. * [0-9]) (? =. * [\ d \ X]) (? =. * [! $ #%]). {3,} $/") | –