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

 

Bài 5 nodejs: Single Thread và Multi-threads

Thread: Trong một môi trường vi tính, thread có thể như là một danh sách liệt kê những dữ kiện, công việc phải làm theo thứ tự trước sau

"Cai nghiện" Facebook một cách thật khoa học

"Cai nghiện" Facebook một cách thật khoa học

Facebook là một mạng xã hội tuyệt vời. Facebook giúp bạn giữ kết nối cũng như chia sẻ mọi điều về cuộc sống thường ngày của mình với gia đình và bạn bè. Nếu là một nhà quản lí, doanh nhân

Hướng dẫn Drupal 8 Theming Fundamentals phần 1

Hướng dẫn Drupal 8 Theming Fundamentals phần 1

We’re going to begin by building the bare minimum required to get our theme working.

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

 

Diet con trung