Página Inicial > Hands on code > Remover acentos de strings (C#)

Remover acentos de strings (C#)

Se você pensou em utilizar replace para remover acentos das string, pode começar a comemorar, pois não vou postar somente uma maneira para fazer isso, mas sim, duas maneiras.

Segue o primeiro exemplo que utiliza a classe Regex
- class System.Text.RegularExpressions.Regex

public string RemoveAcentosComRegEx(string inputString)
        {
            Regex replace_a_Accents = new Regex("[á|à|ä|â]", RegexOptions.Compiled);
            Regex replace_e_Accents = new Regex("[é|è|ë|ê]", RegexOptions.Compiled);
            Regex replace_i_Accents = new Regex("[í|ì|ï|î]", RegexOptions.Compiled);
            Regex replace_o_Accents = new Regex("[ó|ò|ö|ô]", RegexOptions.Compiled);
            Regex replace_u_Accents = new Regex("[ú|ù|ü|û]", RegexOptions.Compiled);
            inputString = replace_a_Accents.Replace(inputString, "a");
            inputString = replace_e_Accents.Replace(inputString, "e");
            inputString = replace_i_Accents.Replace(inputString, "i");
            inputString = replace_o_Accents.Replace(inputString, "o");
            inputString = replace_u_Accents.Replace(inputString, "u");
            return inputString;
        }

O segundo exemplo é mais elaborado e utiliza a classe StringBuilder e os Enum’s NormalizationForm e UnicodeCategory
- class System.Text.StringBuilder
- enum System.Text.NormalizationForm
- enum System.Globalization.UnicodeCategory

Importe a API:

using System.Globalization;
public string removeAcentosComNormalizacao(string inputString)
        {
            if ((inputString == "") || (inputString == null))
                return "";

            string normalizedString = inputString.Normalize(NormalizationForm.FormD);
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < normalizedString.Length; i++)
            {
                UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(normalizedString[i]);
                if (uc != UnicodeCategory.NonSpacingMark)
                {
                    sb.Append(normalizedString[i]);
                }
            }
            return (sb.ToString().Normalize(NormalizationForm.FormC));
        }

Espero ter contribuído!

  1. Lucas Daniel Ottoni
    14, fevereiro, 2011 em 15:24 | #1

    Muito bom esta remocao de acentos utilizando a API Globalization. Show de bola.
    Evitar uso de hardcodes é a melhor coisa a se fazer

  2. 14, fevereiro, 2011 em 15:25 | #2

    Com certeza Lucas!

  3. rob
    6, junho, 2011 em 19:07 | #3

    Muito, funciona perfeitamento, grato pela dica!

  4. 6, junho, 2011 em 21:39 | #4

    Que bom que te serviu!!! Abs!