HOWTO · JavaScript

Comparación de cadenas sin distinción de mayúsculas y minúsculas en JavaScript

Aprende a comparar cadenas ignorando las mayúsculas en JavaScript: cuándo convertirlas al mismo formato, cuándo usar localeCompare() y cuándo recurrir a expresiones regulares.

En esta página

La igualdad entre cadenas en JavaScript distingue entre mayúsculas y minúsculas, por lo que "Hello" === "hello" devuelve false. Para comparar dos cadenas completas ignorando las mayúsculas, convierte ambas con toLowerCase() y compara los resultados. Usa localeCompare() si la comparación debe seguir las reglas de un idioma, y una expresión regular si necesitas buscar un patrón en lugar de comparar cadenas completas.

Convierte ambas cadenas al mismo formato para comparaciones sencillas

Antes de usar la igualdad estricta, convierte los dos valores de la misma manera. toLowerCase() es una opción habitual; también puedes aplicar el mismo patrón con toUpperCase(), pero ninguno de los dos métodos es siempre preferible. Convertir mayúsculas y minúsculas resulta práctico para identificadores comunes y entradas de usuario, aunque no constituye una operación universal de plegado de mayúsculas para Unicode. Si tu aplicación debe considerar equivalentes determinados caracteres o seguir reglas propias de un idioma, elige y comprueba explícitamente ese comportamiento.

En este ejemplo, ambos valores se convierten a minúsculas antes de compararlos:

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

Este método sirve para una comprobación sencilla de igualdad porque normaliza ambos valores antes de compararlos con igualdad estricta. La conversión produce nuevas cadenas; no modifica los valores originales. Si necesitas equivalencia u ordenación sensibles al idioma, usa localeCompare() y selecciona sus opciones deliberadamente.

Usa localeCompare() cuando importe la comparación según el idioma

localeCompare() compara cadenas según reglas de ordenación lingüística y devuelve un número: cero significa que las cadenas se consideran equivalentes con las opciones elegidas; un valor negativo o positivo indica su orden relativo. Para comprobar si son equivalentes, verifica si el resultado es cero.

La opción sensitivity determina qué diferencias se tienen en cuenta. Con "accent", se ignoran las diferencias entre mayúsculas y minúsculas, pero los acentos siguen siendo significativos. Con "base", pueden ignorarse tanto las mayúsculas como los acentos. El ejemplo compara "café" con "CAFÉ" usando "accent", por lo que ambos valores se consideran equivalentes. Una variante sin acento también podría considerarse equivalente con "base". El resultado exacto de la ordenación depende del idioma; si tu aplicación necesita las reglas de uno concreto, indica la configuración regional y comprueba las cadenas importantes para tus usuarios.

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

Elige este enfoque cuando la equivalencia deba seguir reglas de ordenación lingüística. Para una comprobación simple que ignore las mayúsculas y no requiera esas reglas, es más sencillo convertir ambas cadenas al mismo formato.

Usa una expresión regular cuando necesites buscar un patrón

Una expresión regular resulta útil para encontrar texto que siga un patrón. La bandera i permite buscar sin distinguir entre mayúsculas y minúsculas, mientras que test() indica si el patrón coincide con alguna parte de una cadena. Esto no equivale a comparar cadenas completas: una expresión sin anclas puede coincidir solo con una parte de la entrada. Para exigir una coincidencia exacta con texto proporcionado por el usuario, escapa los metacaracteres de expresiones regulares y ancla ambos extremos. En JavaScript, $ también puede coincidir justo antes de un terminador de línea final; por eso, el ejemplo añade una comprobación del final real de la cadena. Antes de crear una instancia de RegExp, escapa el texto proporcionado.

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

Si solo quieres comparar dos cadenas, suele ser más claro convertirlas al mismo formato o usar localeCompare(). Evita añadir la bandera g a una expresión regular reutilizada con test(), salvo que gestiones intencionadamente su propiedad lastIndex: las búsquedas globales pueden modificar su estado entre llamadas. En resumen, convierte las cadenas para una igualdad habitual, usa localeCompare() cuando la ordenación lingüística afecte a la equivalencia y recurre a una expresión regular cuando la entrada deba coincidir con un patrón.