在C#中过滤字符串时忽略带重音的字母

时间:2015-09-17 14:06:22

标签: c#

在下面的代码块中,无法识别重音字母(我属于"否则")

           StringBuilder sb = new StringBuilder();
           foreach (char c in str) {
              if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '.' || c == '_') {
                 sb.Append(c);
              }
              else
              {
               // if c is accented, i arrive here
              }

如何忽略重音? 谢谢你的帮助

2 个答案:

答案 0 :(得分:8)

考虑使用char.IsLetterOrDigit(c)

  

指示指定的Unicode字符是分类为字母还是十进制数字。

if (char.IsLetterOrDigit(c) || c == '.' || c == '_') {
    sb.Append(c);
}

对于任何字母,函数都返回true,包括带重音的字母。

答案 1 :(得分:2)

如何通过删除重音符号和变音符号来清理字符串?

public string RemoveAccentsAndDiacritics(string s)
{
    return string.Concat(
        s.Normalize(NormalizationForm.FormD)
         .Where(c => System.Globalization.CharUnicodeInfo.GetUnicodeCategory(c) !=
                     System.Globalization.UnicodeCategory.NonSpacingMark));
}