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

 
Kinh nghiệm quản lý 12.500 iPad trong doanh nghiệp

Kinh nghiệm quản lý 12.500 iPad trong doanh nghiệp

Trong khi nhiều người cho rằng iPad chỉ phù hợp dùng trên giường ngủ, lãnh đạo hãng SAP đã quyết định dùng nó trong công việc.

LG Optimus 3D Phone Review, a Magical Allure of 3D

LG Optimus 3D Phone Review, a Magical Allure of 3D

Introduction of 4G was a thrill in the world and people were passionate about implementing this technology in their daily lives.

Ủy Ban Châu Âu sẽ offering bug bounties cho các Open Source software

Ủy Ban Châu Âu sẽ offering bug bounties cho các Open Source software

The European Commission worked with the Drupal Security Team to set aside 89,000€ (or roughly $100,000 USD) for a Drupal bug bounty.

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

 

Diet con trung