Como remover acentos e caracteres especiais de uma string em C#


1- Substituir caracteres especiais utilizando Regular Expression

A função abaixo utiliza Regular Expression para substituir caracteres especiais de uma string

public static string RemoveSpecialCharacters(string text, bool allowSpace = false)
{
	string ret;

	if (allowSpace)
		ret = System.Text.RegularExpressions.Regex.Replace(text, @"[^0-9a-zA-ZéúíóáÉÚÍÓÁèùìòàÈÙÌÒÀõãñÕÃÑêûîôâÊÛÎÔÂëÿüïöäËYÜÏÖÄçÇ\s]+?", string.Empty);
	else
		ret = System.Text.RegularExpressions.Regex.Replace(text, @"[^0-9a-zA-ZéúíóáÉÚÍÓÁèùìòàÈÙÌÒÀõãñÕÃÑêûîôâÊÛÎÔÂëÿüïöäËYÜÏÖÄçÇ]+?", string.Empty);

	return ret;
}

Exemplos de entrada e saída:

"teste!@#&#" -> "teste"

Mais sobre Regular Expressions, aqui: Tutorial Regular Expressions

2- Substituir acento

A função C# abaixo substitui caracteres com acento pelo seu equivalente sem acento, por exemplo, troca “á” por “a” e “ç” por “c” sem perder o maiúsculo e minúsculo do texto.

public static string RemoveDiacritics(string text)
{
	if (string.IsNullOrEmpty(text))
		return text;

	StringBuilder sb = new StringBuilder();
	for (int i = 0; i < text.Length; i++)
	{
		if (text[i] > 255)
			sb.Append(text[i]);
		else
			sb.Append(s_Diacritics[text[i]]);
	}

	return sb.ToString();
}

private static readonly char[] s_Diacritics = GetDiacritics();
private static char[] GetDiacritics()
{
	char[] accents = new char[256];

	for (int i = 0; i < 256; i++)
		accents[i] = (char)i;

	accents[(byte)'á'] = accents[(byte)'à'] = accents[(byte)'ã'] = accents[(byte)'â'] = accents[(byte)'ä'] = 'a';
	accents[(byte)'Á'] = accents[(byte)'À'] = accents[(byte)'Ã'] = accents[(byte)'Â'] = accents[(byte)'Ä'] = 'A';

	accents[(byte)'é'] = accents[(byte)'è'] = accents[(byte)'ê'] = accents[(byte)'ë'] = 'e';
	accents[(byte)'É'] = accents[(byte)'È'] = accents[(byte)'Ê'] = accents[(byte)'Ë'] = 'E';

	accents[(byte)'í'] = accents[(byte)'ì'] = accents[(byte)'î'] = accents[(byte)'ï'] = 'i';
	accents[(byte)'Í'] = accents[(byte)'Ì'] = accents[(byte)'Î'] = accents[(byte)'Ï'] = 'I';

	accents[(byte)'ó'] = accents[(byte)'ò'] = accents[(byte)'ô'] = accents[(byte)'õ'] = accents[(byte)'ö'] = 'o';
	accents[(byte)'Ó'] = accents[(byte)'Ò'] = accents[(byte)'Ô'] = accents[(byte)'Õ'] = accents[(byte)'Ö'] = 'O';

	accents[(byte)'ú'] = accents[(byte)'ù'] = accents[(byte)'û'] = accents[(byte)'ü'] = 'u';
	accents[(byte)'Ú'] = accents[(byte)'Ù'] = accents[(byte)'Û'] = accents[(byte)'Ü'] = 'U';

	accents[(byte)'ç'] = 'c';
	accents[(byte)'Ç'] = 'C';

	accents[(byte)'ñ'] = 'n';
	accents[(byte)'Ñ'] = 'N';

	accents[(byte)'ÿ'] = accents[(byte)'ý'] = 'y';
	accents[(byte)'Ý'] = 'Y';

	return accents;
}

Exemplos de entrada e saída:

"Maça" -> "Maca"  
"José da Silva" -> "Jose da Silva"  
"Coração" -> "Coracao"  

3- Código do exemplo

O código do exemplo está disponível em:

https://github.com/educoutinho/SpecialCharactersTest


Comentários