11/08/2018, 20:36

Bỏ dấu tiếng Việt trong Typescript

Bỏ dấu tiếng Việt trong Typescript Vấn đề này không hề mới lạ và có vô số mã nguồn làm việc này rồi: Một số kĩ thuật xử lí tiếng Việt trong Javascript. Diacritics.js Nhưng chúng chỉ chạy tốt trên desktop với bảng mã Unicode chuẩn. Một số điện thoại Android sử dụng bộ gõ với Combining ...

Bỏ dấu tiếng Việt trong Typescript

Vấn đề này không hề mới lạ và có vô số mã nguồn làm việc này rồi:

  • Một số kĩ thuật xử lí tiếng Việt trong Javascript.
  • Diacritics.js

Nhưng chúng chỉ chạy tốt trên desktop với bảng mã Unicode chuẩn. Một số điện thoại Android sử dụng bộ gõ với Combining Diacritical Marks thì không còn chính xác nữa. Ví dụ:

à = a + u0300
á = a + u0301
ã = a + u0309
ả = a + u0303
ạ = a + u0323

Mã nguồn

const cleanAccents = (str: string): string => {
    str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, "a");
    str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, "e");
    str = str.replace(/ì|í|ị|ỉ|ĩ/g, "i");
    str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, "o");
    str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, "u");
    str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, "y");
    str = str.replace(/đ/g, "d");
    str = str.replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, "A");
    str = str.replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, "E");
    str = str.replace(/Ì|Í|Ị|Ỉ|Ĩ/g, "I");
    str = str.replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, "O");
    str = str.replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, "U");
    str = str.replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, "Y");
    str = str.replace(/Đ/g, "D");
    // Combining Diacritical Marks
    str = str.replace(/u0300|u0301|u0303|u0309|u0323/g, ""); // huyền, sắc, hỏi, ngã, nặng 
    str = str.replace(/u02C6|u0306|u031B/g, ""); // mũ â (ê), mũ ă, mũ ơ (ư)

    return str;
}

Viết hoa chữ cái đầu

const toTitleCase = (str: string): string => {
    return str.replace(
        /wS*/g,
        function(txt) {
            return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
        }
    );
};

Ngoài ra, có thể sử dụng hàm toLocaleLowerCase và toLocaleUpperCase để chuyển ký tự hoa/thường trong tiếng Việt.

0