Paaxio 1.0
Plateforme de streaming musical - SAE IUT Bayonne
Chargement...
Recherche...
Aucune correspondance
validator.class.php
Aller à la documentation de ce fichier.
1<?php
2
35{
39 private array $regles;
40
44 private array $messagesErreurs = [];
45
50 private const PASSWORD_STRONG_REGEX = '/^(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*()_+\-=\[\]{}|;:\'",.<>?\/~`]).{8,}$/';
51
55 private const PSEUDO_REGEX = '/^[a-zA-Z0-9_]+$/';
56
62 public function __construct(array $regles)
63 {
64 $this->regles = $regles;
65 }
66
73 public function valider(array $donnees): bool
74 {
75 $valide = true;
76 $this->messagesErreurs = []; // Réinitialise les erreurs à chaque validation
77
78 foreach ($this->regles as $champ => $reglesChamp) {
79 $valeur = $donnees[$champ] ?? null;
80
81 if (!$this->validerChamp($champ, $valeur, $reglesChamp)) {
82 $valide = false;
83 }
84 }
85
86 return $valide;
87 }
88
97 private function validerChamp(string $champ, mixed $valeur, array $regles): bool
98 {
99 $estValide = true;
100
101 // 1. Vérification préalable de la règle "obligatoire".
102 if (isset($regles['obligatoire']) && $regles['obligatoire'] && empty($valeur)) {
103 $this->messagesErreurs[] = "Le champ $champ est obligatoire.";
104 return false; // Arrête si champ obligatoire vide
105 }
106
107 // 2. Si le champ est vide et non obligatoire, aucune autre validation nécessaire.
108 if (empty($valeur) && (!isset($regles['obligatoire']) || !$regles['obligatoire'])) {
109 return true;
110 }
111
112 // 3. Application des autres règles de validation.
113 foreach ($regles as $regle => $parametre) {
114 switch ($regle) {
115 case 'type':
116 if ($parametre === 'string' && !is_string($valeur)) {
117 $this->messagesErreurs[] = "Le champ $champ doit être une chaîne de caractères.";
118 $estValide = false;
119 } elseif ($parametre === 'integer' && !filter_var($valeur, FILTER_VALIDATE_INT)) {
120 $this->messagesErreurs[] = "Le champ $champ doit être un nombre entier.";
121 $estValide = false;
122 } elseif ($parametre === 'numeric' && !is_numeric($valeur)) {
123 $this->messagesErreurs[] = "Le champ $champ doit être une valeur numérique.";
124 $estValide = false;
125 }
126 break;
127 case 'longueur_min':
128 if (strlen($valeur) < $parametre) {
129 $this->messagesErreurs[] = "Le champ $champ doit comporter au moins $parametre caractères.";
130 $estValide = false;
131 }
132 break;
133 case 'longueur_max':
134 if (strlen($valeur) > $parametre) {
135 $this->messagesErreurs[] = "Le champ $champ ne doit pas dépasser $parametre caractères.";
136 $estValide = false;
137 }
138 break;
139 case 'longueur_exacte':
140 if (strlen($valeur) !== $parametre) {
141 $this->messagesErreurs[] = "Le champ $champ doit comporter exactement $parametre caractères.";
142 $estValide = false;
143 }
144 break;
145 case 'format':
146 if (is_string($parametre) && !preg_match($parametre, $valeur)) {
147 $this->messagesErreurs[] = "Le format du champ $champ est invalide.";
148 $estValide = false;
149 } elseif ($parametre === FILTER_VALIDATE_EMAIL && !filter_var($valeur, FILTER_VALIDATE_EMAIL)) {
150 $this->messagesErreurs[] = "L'adresse email est invalide.";
151 $estValide = false;
152 } elseif ($parametre === FILTER_VALIDATE_URL && !filter_var($valeur, FILTER_VALIDATE_URL)) {
153 $this->messagesErreurs[] = "L'URL du site web est invalide.";
154 $estValide = false;
155 }
156 break;
157 case 'plage_min':
158 if ($valeur < $parametre) {
159 $this->messagesErreurs[] = "La valeur de $champ doit être au minimum $parametre.";
160 $estValide = false;
161 }
162 break;
163 case 'plage_max':
164 if ($valeur > $parametre) {
165 $this->messagesErreurs[] = "La valeur de $champ ne doit pas dépasser $parametre.";
166 $estValide = false;
167 }
168 break;
169 case 'mot_de_passe_fort':
170 if ($parametre && !preg_match(self::PASSWORD_STRONG_REGEX, $valeur)) {
171 $this->messagesErreurs[] = "Le mot de passe doit contenir au moins 8 caractères, une majuscule, un chiffre et un symbole.";
172 $estValide = false;
173 }
174 break;
175 case 'pseudo_format':
176 if ($parametre && !preg_match(self::PSEUDO_REGEX, $valeur)) {
177 $this->messagesErreurs[] = "Le champ $champ ne doit contenir que des lettres, des chiffres et des underscores, sans espaces.";
178 $estValide = false;
179 }
180 break;
181 case 'age_minimum':
182 // Vérifie que l'utilisateur a au moins $parametre années.
183 $birthDate = \DateTime::createFromFormat('Y-m-d', $valeur);
184 if ($birthDate) {
185 $aujourdhui = new \DateTimeImmutable();
186 $dateMinimum = $aujourdhui->modify("-{$parametre} years");
187 if ($birthDate > $dateMinimum) {
188 $this->messagesErreurs[] = "Vous devez avoir au moins $parametre ans.";
189 $estValide = false;
190 }
191 } else {
192 $this->messagesErreurs[] = "La date de naissance fournie est invalide.";
193 $estValide = false;
194 }
195 break;
196 }
197 }
198
199 return $estValide;
200 }
201
207 public function getMessagesErreurs(): array
208 {
210 }
211}
Permet de valider des données selon des règles spécifiées.
const PASSWORD_STRONG_REGEX
Expression régulière pour valider la force d'un mot de passe : Au moins 8 caractères,...
const PSEUDO_REGEX
Expression régulière pour valider un pseudo : uniquement lettres, chiffres et underscores.
valider(array $donnees)
Valide les données fournies par rapport aux règles de validation définies.
__construct(array $regles)
Constructeur de la classe Validator.
validerChamp(string $champ, mixed $valeur, array $regles)
Valide un champ spécifique selon ses règles.
array $messagesErreurs
getMessagesErreurs()
Retourne les messages d'erreur générés lors de la validation.