Loại bỏ các dấu tiếng về dạng không dấu C#

Loại bỏ các dấu tiếng về dạng không dấu C#

Đoạn codesnippet dưới đây cho phép chuyển chuỗi văn bản tiếng việt về dạng không dấu sử dụng C# kết hợp với Regex.

Loại bỏ các dấu tiếng về dạng không dấu C#
Bảng chữ cái tiếng việt

Các bước thực hiện như sau:
1. Sử dụng Regex tìm tất cả các ký tự tiếng việt có dấu
2. Thay thế ký tự vừa tìm được bởi ký tự tiếng việt không dấu tương ứng
3. Lặp tìm hết các ký tự có dấu trong bảng chữ cái tiếng việt

Cụ thể dưới đây là đoạn mã hoàn tất quá trình trên

// Chuyển tiếng việt có dấu thành không dấu
public unsafe static string RejectMarks(string text)
{
  string pattern = new string[7];
  char replaceChar = new char[14];

  // Khởi tạo giá trị thay thế

  replaceChar[0] = 'a';
  replaceChar[1] = 'd';
  replaceChar[2] = 'e';
  replaceChar[3] = 'i';
  replaceChar[4] = 'o';
  replaceChar[5] = 'u';
  replaceChar[6] = 'y';
  replaceChar[7] = 'A';
  replaceChar[8] = 'D';
  replaceChar[9] = 'E';
  replaceChar[10] = 'I';
  replaceChar[11] = 'O';
  replaceChar[12] = 'U';
  replaceChar[13] = 'Y';

  //Mẫu cần thay thế tương ứng

  pattern[0] = "(á|à|ả|ã|ạ|ă|ắ|ằ|ẳ|ẵ|ặ|â|ấ|ầ|ẩ|ẫ|ậ)"; //letter a
  pattern[1] = "đ"; //letter d
  pattern[2] = "(é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ)"; //letter e
  pattern[3] = "(í|ì|ỉ|ĩ|ị)"; //letter i
  pattern[4] = "(ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ)"; //letter o
  pattern[5] = "(ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự)"; //letter u
  pattern[6] = "(ý|ỳ|ỷ|ỹ|ỵ)"; //letter y

  fixed (char* ptrChar = replaceChar)
  {
    for (int i = 0; i < pattern.Length; i++)
    {
      MatchCollection matchs = Regex.Matches(text, 
pattern[i], RegexOptions.IgnoreCase);
      foreach (Match m in matchs)
      {
        char ch = char.IsLower(m.Value[0]) ? *(ptrChar + i) :
 *(ptrChar + i + 7);
        text = text.Replace(m.Value[0], ch);
      }
    }
  }
  return text;
}

Tải xuống code mẫu: http://www.mediafire.com/?xhx8laots9hzdpr Một đoạn Regex code snippet khác khá ngắn hỗ trợ việc chuyển đổi tiếng việt về dạng không dấu.

public string Change_AV(string ip_str_change)
        {
            Regex v_reg_regex = new Regex("\\p{IsCombiningDiacriticalMarks}+");
            string v_str_FormD = ip_str_change.Normalize(NormalizationForm.FormD);
            return v_reg_regex.Replace(v_str_FormD, String.Empty).Replace('\u0111', 'd').Replace('\u0110', 'D');
        }

Bạn thấy bài viết này như thế nào?: 
Average: 10 (2 votes)
Ảnh của Binh Tran Thanh

Drupal Consultant

Started my career as a drupal8 developer in EM Solutions . I love learning Web technologies like HTML, CSS, PHP, Jquery Ajax and Drupal backend . Currently working as a drupal backend developer.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Gangnam Style trở thành clip được xem nhiều nhất Youtube

Gangnam Style trở thành clip được xem nhiều nhất Youtube

Sức nóng của “hiện tượng” Gangnam Style dường như vẫn chưa có dấu hiệu hạ nhiệt, khi mới đây clip của ca khúc này đã chính thức trở thành clip có số lượng xem nhiều nhất trong lịch sử Youtube, với hơn 820 triệu lượt xem.

Hướng dẫn Show Drupal Users Their Own Content

Hướng dẫn Show Drupal Users Their Own Content

There are advanced ways to do this, such as using the Workbench module, but in this tutorial we'll show you an easy way to provide a list of each user's content.

Hoàng tử Ả Rập đầu tư mạnh vào Twitter

Hoàng tử Ả Rập đầu tư mạnh vào Twitter

Hoàng tử Alweleed Bin Talal của Ả Rập Saudi đã mua 300 triệu cổ phần của Twitter, trở thành cổ đông chiến lược của "tiểu blog".

Công ty diệt chuột T&C

 

Diet con trung