在c#中过滤字符串时忽略重音字母

本文关键字:过滤 字符串 | 更新日期: 2023-09-27 18:13:06

在下面的代码块中,不能识别重音字母(i属于"else")

           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
              }

我怎么做才能忽略重音?谢谢你的帮助

在c#中过滤字符串时忽略重音字母

考虑使用char.IsLetterOrDigit(c)。

指定的Unicode字符是字母还是十进制数字。

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

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

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

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