HOWTO · JavaScript

Confronto tra stringhe senza distinzione tra maiuscole e minuscole in JavaScript

Scopri come confrontare stringhe ignorando maiuscole e minuscole in JavaScript: usa la conversione delle maiuscole per l'uguaglianza semplice, localeCompare() per le regole linguistiche ed espressioni regolari per cercare modelli.

In questa pagina

In JavaScript, l’uguaglianza tra stringhe distingue maiuscole e minuscole, quindi "Hello" === "hello" restituisce false. Per verificare l’uguaglianza ignorando le maiuscole, converti entrambe le stringhe con toLowerCase() e confronta i risultati. Usa localeCompare() quando vuoi applicare le regole di una lingua e un’espressione regolare quando devi cercare un modello anziché confrontare due stringhe complete.

Converti entrambe le stringhe nello stesso formato per confronti semplici

Converti entrambi i valori nello stesso modo prima di usare l’uguaglianza stretta. toLowerCase() è una scelta comune; puoi applicare lo stesso schema con toUpperCase(), ma nessuno dei due metodi è sempre preferibile. La conversione è pratica per identificatori comuni e input degli utenti, ma non costituisce una soluzione universale di case folding per Unicode. Se l’applicazione deve considerare equivalenti caratteri specifici o seguire regole linguistiche, scegli il comportamento in modo esplicito e verificalo.

L’esempio confronta due valori dopo averli convertiti in minuscolo:

const first = "Hello";
const second = "hello";
const equalIgnoringCase = first.toLowerCase() === second.toLowerCase();
console.log(equalIgnoringCase);
true

Questo approccio funziona per una verifica semplice di uguaglianza perché entrambi i valori vengono normalizzati prima del confronto stretto. La conversione crea nuove stringhe e non modifica i valori originali. Per equivalenze o ordinamenti sensibili alla lingua, usa localeCompare() e scegli con attenzione le relative opzioni.

Usa localeCompare() quando conta il confronto secondo una lingua

localeCompare() confronta le stringhe secondo le regole di collazione e restituisce un numero: zero indica che le stringhe sono equivalenti con le opzioni selezionate; un valore negativo o positivo ne indica l’ordine. Per verificare l’uguaglianza, controlla se il risultato è zero.

L’opzione sensitivity determina quali differenze contano. Con "accent", le differenze tra maiuscole e minuscole vengono ignorate, mentre quelle tra lettere accentate e non accentate restano significative. Con "base", possono essere ignorate sia le maiuscole sia gli accenti. Nell’esempio seguente, "café" viene confrontato con "CAFÉ" usando "accent", quindi i valori risultano equivalenti. Anche una grafia senza accento può risultare equivalente con "base". Il comportamento preciso della collazione dipende dalla lingua: specifica un locale se l’applicazione deve rispettare l’ordinamento di una lingua particolare e verifica le stringhe importanti per i tuoi utenti.

const result = "café".localeCompare("CAFÉ", undefined, { sensitivity: "accent" });
console.log(result === 0);
true

Scegli questo approccio quando l’equivalenza deve seguire le regole di collazione. Per un semplice confronto senza distinzione tra maiuscole e minuscole, senza esigenze di collazione specifiche di una lingua, è più diretto normalizzare entrambe le stringhe.

Usa un’espressione regolare quando devi cercare un modello

Un’espressione regolare è utile per trovare testo che corrisponde a un modello. Il flag i rende la ricerca insensibile a maiuscole e minuscole, mentre test() indica se il modello corrisponde in un punto qualsiasi della stringa. Questo non equivale a confrontare stringhe in generale: un’espressione senza ancoraggi può corrispondere solo a una parte dell’input. Per una corrispondenza esatta con testo fornito dall’utente, fai l’escape dei metacaratteri delle espressioni regolari e ancora il modello a entrambe le estremità. In JavaScript, $ può corrispondere anche prima di un terminatore di riga finale; per questo l’esempio aggiunge un’asserzione di fine effettiva, così da richiedere la fine reale del valore. Il testo fornito viene sottoposto a escape prima di creare una RegExp.

const userText = "JavaScript";
const escapedText = userText.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
const exactPattern = new RegExp("^" + escapedText + "$(?![\\s\\S])", "i");
console.log(exactPattern.test("javascript"));
true

Se vuoi confrontare due stringhe, la conversione tra maiuscole e minuscole o localeCompare() sono di solito più chiare. Evita di aggiungere il flag g a un’espressione regolare riutilizzata con test(), a meno che tu non gestisca intenzionalmente lastIndex: le verifiche globali possono modificarne lo stato tra una chiamata e l’altra. In breve, usa la conversione per l’uguaglianza ordinaria, localeCompare() quando la collazione linguistica influisce sull’equivalenza e un’espressione regolare quando l’input deve corrispondere a un modello.