> Faqs > La mejor manera de eliminar tildes o acentos en Javascript

La mejor manera de eliminar tildes o acentos en Javascript

Quiero saber cuál es la mejor manera de eliminar caracteres no deseados en cadenas en Javascript.

Quiero quitar tildes en las palabras para dejarlas limpias y poder compararlas sin tener en cuenta caracteres especiales no deseados. He visto que se pueden quitar con expresiones regulares y queda un código bastante sencillo. ¿Es la mejor manera? Cuál sería su sugerencia para eliminar los acentos, como tildes, el rabillo de la eñe, etc. de las palabras?

Respuestas

Efectivamente, las funciones de manipulación de cadenas con expresiones regulares suelen quedar muy bonitas, el caso es hacerlas uno mismo. A veces es complicado ;)

A mi personalmente me parece esta manera la más limpia de quitar los acentos (tildes) y otros caracteres un poco conflictivos de las cadenas, ya sea para hacer búsquedas, usarlas para URL, slug o lo que necesites.

La solución la tienes en stackoverflow.

Básicamente hace uso de características nativas del navegador, en versiones modernas de Javascript, que siendo nativas es de suponer que darán mucho más rendimiento que las maneras programadas manualmente para hacer lo mismo.

La función en sí es la siguiente:

const removeAccents = (str) => {
  return str.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
} 

La usas así:

var cadena = removeAccents('La uña se me rompió después de beber cachaça');
console.log(cadena); // esto muestra en la consola el texto "La una se me rompio despues de beber cachaca"
Miguel Angel
3140 140 209 17

Yo lo resolví así:

function quitarAcentos(cadena){
	const acentos = {'á':'a','é':'e','í':'i','ó':'o','ú':'u','Á':'A','É':'E','Í':'I','Ó':'O','Ú':'U'};
	return cadena.split('').map( letra => acentos[letra] || letra).join('').toString();	
}

Saludos.

Federico
5 1