"0612345678" (RG-1.20). * Le formatage d'affichage "XX XX XX XX XX" est de la responsabilite du front. * - email : lowercase integral (RG-1.21) * * Toutes les methodes sont null-safe et trim-ent l'entree ; une chaine vide * apres trim devient null (evite de persister "" dans des colonnes nullable). */ final class ClientFieldNormalizer { /** * Nom de societe en majuscules (RG-1.18). Conserve null tel quel ; une * chaine non vide est trim + upper. Une chaine vide reste "" (champ * obligatoire : c'est l'Assert\NotBlank qui rejette, pas le normalizer). */ public function normalizeCompanyName(?string $value): ?string { if (null === $value) { return null; } return mb_strtoupper(trim($value), 'UTF-8'); } /** * Nom/prenom de personne en Title Case (RG-1.19) : "JEAN dupont" -> * "Jean Dupont". Une chaine vide apres trim devient null. */ public function normalizePersonName(?string $value): ?string { if (null === $value) { return null; } $value = trim($value); return '' === $value ? null : mb_convert_case($value, MB_CASE_TITLE, 'UTF-8'); } /** * Email en minuscules (RG-1.21). Une chaine vide apres trim devient null. */ public function normalizeEmail(?string $value): ?string { if (null === $value) { return null; } $value = trim($value); return '' === $value ? null : mb_strtolower($value, 'UTF-8'); } /** * Telephone reduit aux chiffres (RG-1.20) : "06.12.34.56.78" -> * "0612345678". Une valeur sans aucun chiffre devient null. */ public function normalizePhone(?string $value): ?string { if (null === $value) { return null; } $digits = preg_replace('/\D+/', '', $value) ?? ''; return '' === $digits ? null : $digits; } }