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.
Đ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.
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');
}