JavaScript: manipolare le stringhe per normalizzare testo da input utente

by Anastasia P.
SHARE
JavaScript: manipolare le stringhe per normalizzare testo da input utente
© Guida-HTML5.it

Introduzione

La manipolazione delle stringhe è una delle abilità più utili in JavaScript, soprattutto quando si lavora con dati inseriti dall’utente. Un caso pratico e molto comune è la normalizzazione del testo: trasformare una stringa “grezza” in una versione pulita, coerente e pronta per essere salvata, confrontata o mostrata in interfaccia.

Per esempio, un utente potrebbe inserire:

  • spazi extra all’inizio e alla fine
  • maiuscole e minuscole incoerenti
  • accenti o caratteri speciali
  • separatori diversi, come trattini, underscore o più spazi consecutivi

Se vuoi confrontare due testi, creare slug, cercare record in un database o semplicemente rendere i dati più omogenei, normalizzare le stringhe è una soluzione pratica. In questo tutorial vedremo come costruire una funzione riutilizzabile che pulisce una stringa in modo intelligente, usando metodi nativi di JavaScript.

Codice completo

// Funzione per normalizzare una stringa di input utente
function normalizzaTesto(input) {
  if (typeof input !== "string") {
    throw new TypeError("L´input deve essere una stringa");
  }

  return input
    .trim() // rimuove spazi iniziali e finali
    .toLowerCase() // converte tutto in minuscolo
    .normalize("NFD") // separa lettere e segni diacritici
    .replace(/[u0300-u036f]/g, "") // rimuove gli accenti
    .replace(/[^a-z0-9s-]/g, "") // elimina caratteri non desiderati
    .replace(/[s_-]+/g, " ") // sostituisce sequenze di spazi, underscore e trattini con uno spazio
    .replace(/s+/g, " "); // compatta eventuali spazi multipli

}

// Variante utile per creare uno slug da un titolo
function creaSlug(testo) {
  return normalizzaTesto(testo)
    .replace(/s/g, "-") // trasforma gli spazi in trattini
    .replace(/-+/g, "-"); // evita trattini consecutivi
}

// Esempi di utilizzo
const input1 = "   Caffè   Nero  ";
const input2 = "  JavaScript:  Manipolazione   delle_stringhe! ";
const input3 = "  È un  TESTO  da   pulire---bene  ";

console.log(normalizzaTesto(input1)); 
// "caffe nero"

console.log(normalizzaTesto(input2)); 
// "javascript manipolazione delle stringhe"

console.log(normalizzaTesto(input3)); 
// "e un testo da pulire bene"

console.log(creaSlug(input2)); 
// "javascript-manipolazione-delle-stringhe"

console.log(creaSlug("  Guida pratica a Node.js  ")); 
// "guida-pratica-a-nodejs"

Spiegazione

Il codice sopra non si limita a “tagliare” spazi: costruisce una pipeline di trasformazione. Questo approccio è molto comune nella manipolazione delle stringhe perché ogni passaggio risolve un problema specifico.

1. Controllo del tipo

La funzione inizia verificando che l’input sia davvero una stringa. È una buona pratica perché evita errori silenziosi o comportamenti inattesi se, ad esempio, arriva un numero, un oggetto o null.

2. trim()

trim() rimuove gli spazi iniziali e finali. È utile quando l’utente copia e incolla testo con spazi “invisibili” che possono falsare confronti o validazioni.

3. toLowerCase()

Convertire tutto in minuscolo rende il testo più uniforme. Se devi confrontare due valori, ad esempio “Roma” e “roma”, questa trasformazione evita differenze dovute solo al maiuscolo/minuscolo.

4. normalize("NFD") + rimozione dei segni diacritici

Questo è un passaggio molto interessante. Con normalize("NFD"), JavaScript separa le lettere accentate dai loro segni grafici. Subito dopo, la regex /[u0300-u036f]/g rimuove quei segni.

In pratica:

  • “caffè” diventa “caffe”
  • “È” diventa “E”

Questa tecnica è molto utile per ricerche testuali, filtri e normalizzazione di dati provenienti da fonti diverse.

5. replace(/[^a-z0-9s-]/g, "")

Questa espressione regolare elimina caratteri non alfanumerici, lasciando solo lettere, numeri, spazi e trattini. È una scelta pratica quando vuoi evitare simboli come:

  • punti
  • virgole
  • due punti
  • parentesi
  • emoji o simboli speciali

Naturalmente, puoi adattare questa regola in base al tuo caso d’uso.

6. replace(/[s_-]+/g, " ")

Qui trasformiamo sequenze di spazi, underscore e trattini in un singolo spazio. È utile perché input diversi possono rappresentare lo stesso concetto con separatori differenti.

7. replace(/s+/g, " ")

Infine, comprimiamo eventuali spazi multipli in un solo spazio. Questo rende il testo finale più pulito e prevedibile.

8. creaSlug()

La seconda funzione riutilizza normalizzaTesto() e converte gli spazi in trattini. Questo è perfetto per creare slug leggibili e consistenti per URL, titoli o identificatori testuali.

Best practice

  • Separa la logica in funzioni piccole: una funzione per normalizzare, un’altra per creare slug. Così il codice è più semplice da testare e riusare.
  • Valida sempre l’input: non dare per scontato che il valore sia una stringa. In applicazioni reali i dati possono arrivare in formati imprevisti.
  • Adatta le regex al contesto: se devi gestire anche caratteri non latini, come lettere greche o cirilliche, la regex va ripensata. La soluzione proposta è pensata per testo latino.
  • Usa normalize() con consapevolezza: è ottima per rimuovere accenti, ma non sempre desideri perdere questa informazione. In alcuni casi, per esempio nei nomi propri, potrebbe essere meglio conservarla.
  • Testa con input reali: prova la funzione con stringhe sporche, copiate da form, PDF, email o database. È lì che emergono i problemi veri.
  • Non abusare della pulizia: normalizzare troppo può cancellare informazioni utili. Prima di rimuovere simboli o accenti, chiediti se sono davvero irrilevanti per il tuo caso d’uso.

Riepilogo

La normalizzazione delle stringhe è una tecnica fondamentale in JavaScript quando vuoi trattare l’input utente in modo affidabile. In questo tutorial abbiamo visto come:

  • rimuovere spazi inutili con trim()
  • uniformare il testo con toLowerCase()
  • eliminare accenti usando normalize("NFD")
  • ripulire caratteri speciali con le espressioni regolari
  • creare uno slug leggibile e coerente

Questo approccio è molto utile in form, motori di ricerca interni, sistemi di tagging, dashboard amministrative e in generale ovunque serva confrontare o salvare testo in modo ordinato. Una buona normalizzazione migliora la qualità dei dati e riduce molti bug difficili da individuare.

Approfondisci con risorse ufficiali

  • MDN - String.prototype.trim(): documentazione ufficiale sul metodo per rimuovere spazi iniziali e finali.
  • MDN - String.prototype.toLowerCase(): guida al cambio di maiuscole/minuscole.
  • MDN - String.prototype.normalize(): riferimento ufficiale per la normalizzazione Unicode.
  • MDN - RegExp: documentazione completa sulle espressioni regolari in JavaScript.
  • Unicode Standard: utile per capire meglio come funzionano caratteri, accenti e normalizzazione.

SHARE