Ir para o conteúdo

Como remover acentos em Javascript?

Introdução#

Você provavelmente já deve ter pensado em algumas soluções para remover acentos de uma string, mas deve ter se perguntado se não há uma maneira melhor. Provavelmente você pensou em remover usando replace, regex ou alguma outra forma. Estas soluções funcionam, mas a partir do ES6 um novo método foi introduzido e ele é a nossa salvação.

Quando remover os caracteres especiais?#

Em alguns momentos esses caracteres atrapalham bastante e abaixo vou apresentar alguns dos casos em que você pode querer removê-los.

  1. Ordenação de resultados
  2. Filtragem de resultados
  3. Comparação de strings

Jeito moderno de remover acentos#

A partir do Javascript ES6 (2015), foi introduzido o método .normalize() no tipo String. Esse método normaliza a string, utilizando o padrão Unicode.

function removerAcentos(texto) {
  return texto.normalize('NFD').replace(/[\u0300-\u036f]/g, '')
}

Jeito antigo de remover acentos#

Antes do ES6 você teria muito mais trabalho para remover os acentos. Provavelmente teria em implementar algo parecido com o que está acontecendo no código abaixo.

function removerAcentos(texto) {
    const dict = {
        'a': 'áàãâä',
        'e': 'éèêë',
        'i': 'íìîï',
        'o': 'óòõôö',
        'u': 'úùûü',
        'c': 'ç',
        'n': 'ñ',
        'A': 'ÁÀÃÂÄ',
        'E': 'ÉÈÊË',
        'I': 'ÍÌÎÏ',
        'O': 'ÓÒÕÔÖ',
        'U': 'ÚÙÛÜ',
        'C': 'Ç',
        'N': 'Ñ'
    }

    const dictEntries = Object.entries(dict)

    const letters = texto.split('')

    return letters.map(letter => {
        const selectedItem = dictEntries.find(entry => entry[1].includes(letter))
        if (selectedItem) {
            return selectedItem[0]
        } else {
            return letter
        }
    }).join('')
}

Referências#