Normalizar acentos en Javascript (y Typescript)

Si necesitamos normalizar palabras en nuestro código (por ejemplo, para usar keywords de búsqueda) existen multiples soluciones dependiendo de si utilizamos ES6 o no.

Si usamos ES6 bastará con utilizar la funcion “normalize” incluida en String. Usando el parámetro “NFD” automáticamente dividirá cada letra con acento en dos (“á” pasaría a ser “a´”), de forma que podemos reemplazar todos esos acentos con una expresión regular:

string myString = "áéíóúàèìòù";
myString.normalize("NFD").replace(/[\u0300-\u036f]/g, "");

Si no podemos utilizar ES6 (por ejemplo, por compatibilidades con IE11), existen librerías y con el uso de polyfills se puede conseguir el mismo resultado, pero si tan solo necesitamos esos acentos, podemos usar una función específica que con expresiones regulares elimine esos acentos. Podemos crear una función que procese cualquier texto:

private replaceAccents = (s: string) => {
    var r = s.toLowerCase();
    r = r.replace(new RegExp("[àáâãäå]", 'g'),"a");
    r = r.replace(new RegExp("[èéêë]", 'g'),"e");
    r = r.replace(new RegExp("[ìíîï]", 'g'),"i");                          
    r = r.replace(new RegExp("[òóôõö]", 'g'),"o");
    r = r.replace(new RegExp("[ùúûü]", 'g'),"u");
    r = r.replace(new RegExp("[ýÿ]", 'g'),"y");
    return r;
}

No Responses

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.