Files
Starseed/frontend/shared/utils/textSanitize.ts
T

59 lines
2.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Filtres de saisie texte (retour metier ERP-193) : on retire a la frappe / au
* collage les caracteres parasites (« ²³§~#| … ») des champs texte libres.
*
* Miroir FRONT des patterns back `App\Shared\Domain\Validation\TextInputPattern`
* (allow-list par famille de champ). Le back reste l'autorite (Assert\Regex →
* 422 inline via useFormErrors) ; ces fonctions ne font que le confort de saisie.
* Purs / testables.
*
* IMPORTANT : garder les classes de caracteres STRICTEMENT alignees sur le back
* (toute divergence = soit un caractere bloque au front mais accepte au back, soit
* l'inverse → 422 surprise).
*/
/**
* Noms de personnes (Nom, Prenom, Dirigeant) : lettres (accents), espace,
* apostrophe droite/courbe, tiret, point.
*/
export function sanitizePersonName(value: string): string {
return value.replace(/[^\p{L}\p{M} '.-]/gu, '')
}
/**
* Texte societe / libre (Raison sociale, Concurrents, Fonction) : nom + chiffres,
* virgule, esperluette, slash, parentheses, degre.
*/
export function sanitizeFreeText(value: string): string {
// 0-9 (et pas \p{N}) : \p{N} engloberait les exposants ² ³ — justement parasites.
return value.replace(/[^\p{L}\p{M}0-9 '.,&/()°-]/gu, '')
}
/**
* Adresse (voie, complement, ville) : lettres, chiffres, espace, apostrophe,
* point, virgule, slash, degre, tiret.
*/
export function sanitizeAddress(value: string): string {
// 0-9 (et pas \p{N}) : evite de laisser passer les exposants ² ³.
return value.replace(/[^\p{L}\p{M}0-9 '.,/°-]/gu, '')
}
/**
* Codes alphanumeriques majuscules (N° de compte comptable, N° de TVA, IBAN, BIC) :
* uniquement A-Z et 0-9, majuscule forcee.
*/
export function sanitizeCodeAlnum(value: string): string {
return value.toUpperCase().replace(/[^A-Z0-9]/g, '')
}
/**
* Email : retire espaces et caracteres impossibles dans une adresse, en gardant
* le jeu de caracteres email valides (lettres, chiffres, @ . _ % + - '). La
* validation de FORMAT reste au back (Assert\Email) ; ici on bloque juste les
* parasites (« ²³§~#| … ») a la frappe. La normalisation lowercase est portee par
* MalioInputEmail (prop `lowercase`), on ne la duplique pas.
*/
export function sanitizeEmail(value: string): string {
return value.replace(/[^A-Za-z0-9@._%+'-]/g, '')
}