feat : bloque les caractères spéciaux dans les champs texte des 4 répertoires (ERP-193)

This commit is contained in:
2026-06-19 09:46:23 +02:00
parent 403dc4a870
commit 07f5a95a6b
32 changed files with 537 additions and 58 deletions
@@ -0,0 +1,51 @@
<?php
declare(strict_types=1);
namespace App\Shared\Domain\Validation;
/**
* Profils de caracteres autorises pour les champs texte libres (retour metier
* ERP-193 : bloquer les caracteres parasites « ²³§~#| … » sans casser les saisies
* legitimes — accents, apostrophe, tiret, &, etc.).
*
* Approche allow-list (pas blacklist) : on definit ce qui est AUTORISE par famille
* de champ, le reste est rejete. Couche AUTORITAIRE (back) : `#[Assert\Regex]` avec
* ces patterns et messages FR ; le front (shared/utils/textSanitize.ts) miroite ces
* memes ensembles en filtrant la saisie a la frappe.
*
* Note : `Assert\Regex` laisse passer null et la chaine vide (champs nullable OK) ;
* seules les valeurs non vides sont controlees.
*/
final class TextInputPattern
{
/**
* Noms de personnes (Nom, Prenom, Dirigeant) : lettres (accents inclus),
* espace, apostrophe droite/courbe, tiret, point. Ni chiffres ni symboles.
*/
public const string PERSON_NAME = '/^[\p{L}\p{M} \'.\-]+$/u';
public const string PERSON_NAME_MESSAGE = 'Ce champ ne peut contenir que des lettres, espaces, apostrophes, tirets et points.';
/**
* Texte societe / libre (Raison sociale, Concurrents, Fonction) : comme un nom
* + chiffres, virgule, esperluette, slash, parentheses, degre (n°). Couvre
* « Dupont & Fils », « Achats/Ventes », « Pole 2 ».
*/
// 0-9 (et pas \p{N}) : \p{N} engloberait les exposants ² ³ — justement parasites.
public const string FREE_TEXT = '/^[\p{L}\p{M}0-9 \'.,&\/()°\-]+$/u';
public const string FREE_TEXT_MESSAGE = 'Ce champ contient des caractères non autorisés.';
/**
* Adresse (voie, complement, ville) : lettres, chiffres, espace, apostrophe,
* point, virgule, slash, degre, tiret. Couvre « 12 bis, rue de l’Église ».
*/
public const string ADDRESS = '/^[\p{L}\p{M}0-9 \'.,\/°\-]+$/u';
public const string ADDRESS_MESSAGE = 'Cette adresse contient des caractères non autorisés.';
/**
* Codes alphanumeriques majuscules (N° de compte comptable, N° de TVA) :
* uniquement A-Z et 0-9. Le front force la majuscule a la frappe.
*/
public const string CODE_ALNUM = '/^[A-Z0-9]+$/';
public const string CODE_ALNUM_MESSAGE = 'Ce champ ne doit contenir que des lettres majuscules et des chiffres.';
}