Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
JavaScript: Chuyển tiếng Việt có dấu sang không dấu
function removeVietnameseTones(str) {
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");
// Some system encode vietnamese combining accent as individual utf-8 characters
// Một vài bộ encode coi các dấu mũ, dấu chữ như một kí tự riêng biệt nên thêm hai dòng này
str = str.replace(/\u0300|\u0301|\u0303|\u0309|\u0323/g, ""); // ̀ ́ ̃ ̉ ̣ huyền, sắc, ngã, hỏi, nặng
str = str.replace(/\u02C6|\u0306|\u031B/g, ""); // ˆ ̆ ̛ Â, Ê, Ă, Ơ, Ư
// Remove extra spaces
// Bỏ các khoảng trắng liền nhau
str = str.replace(/ + /g," ");
str = str.trim();
// Remove punctuations
// Bỏ dấu câu, kí tự đặc biệt
str = str.replace(/!|@|%|\^|\*|\(|\)|\+|\=|\<|\>|\?|\/|,|\.|\:|\;|\'|\"|\&|\#|\[|\]|~|\$|_|`|-|{|}|\||\\/g," ");
return str;
}
@danghunglam
Copy link

danghunglam commented Jan 31, 2018

thanks

@luojinzhang
Copy link

luojinzhang commented Mar 12, 2018

good source code

@ThuanLCSE
Copy link

ThuanLCSE commented Mar 31, 2018

Cám ơn hu2di

@bestinme122
Copy link

bestinme122 commented Apr 13, 2018

Thanks dong chi nhieu

@hungdev
Copy link

hungdev commented Jun 8, 2018

thiếu ký tự in hoa


function xoa_dau(str) {
    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");
    return str;
}

@hakicode
Copy link

hakicode commented Nov 29, 2018

"PHẦN MỘT. LỊCH SỬ THẾ GIỚI THỜI NGUYÊN THỦY, CỔ ĐẠI VÀ TRUNG ĐẠI"
Không convert được chữ "thủy"

@mvhix9
Copy link

mvhix9 commented Dec 5, 2018

Cảm ơn bạn nhiều

@khoailang99
Copy link

khoailang99 commented Feb 22, 2019

cảm ơn bạn!!!

@alang-dev
Copy link

alang-dev commented Apr 10, 2019

"PHẦN MỘT. LỊCH SỬ THẾ GIỚI THỜI NGUYÊN THỦY, CỔ ĐẠI VÀ TRUNG ĐẠI"
Không convert được chữ "thủy".
Chữ "thủy" không convert được là do dấu hỏi nó là một ký tự riêng, nếu chạy loop bạn sẽ thấy "thủy" -> [t, h, u, "dấu hỏi", y]

@ScytheDead
Copy link

ScytheDead commented Jul 15, 2019

cảm ơn nhiều 😁😁

@lazidoca
Copy link

lazidoca commented Jul 23, 2019

1 cách khác ngắn gọn hơn với ES2015/ES6 String.Prototype.Normalize()

const str = "PHẦN MỘT. LỊCH SỬ THẾ GIỚI THỜI NGUYÊN THỦY, CỔ ĐẠI VÀ TRUNG ĐẠI";
const newStr = str.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
console.log(newStr)
>> PHAN MOT. LICH SU THE GIOI THOI NGUYEN THUY, CO ĐAI VA TRUNG ĐAI

@davistran86
Copy link

davistran86 commented Jul 29, 2019

@lazidoca: chữ Đ vẫn bị bạn ơi. Chuyển thành kiểu này thì xử luôn chữ Đ:

str
      .normalize("NFD")
      .replace(/[\u0300-\u036f]/g, "")
      .replace(/đ/g, "d")
      .replace(/Đ/g, "D");

@chellongCoder
Copy link

chellongCoder commented Aug 18, 2020

thanks @davistran86

@tannguyenit
Copy link

tannguyenit commented Aug 26, 2020

function convertViToEn(str, toUpperCase = false) {
    str = str.toLowerCase();
    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");
    // Some system encode vietnamese combining accent as individual utf-8 characters
    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, ""); // Â, Ê, Ă, Ơ, Ư

    return toUpperCase ? str.toUpperCase() : str;
}

Pls try this!

@hu2di
Copy link
Author

hu2di commented Aug 27, 2020

Thank @hungdev and @tannguyenit.

@haile01
Copy link

haile01 commented Mar 23, 2021

Truly appreciate your work <3

@QuocDat269
Copy link

QuocDat269 commented Mar 30, 2021

thanks

@vuLongLtPt
Copy link

vuLongLtPt commented Aug 6, 2021

thanks alot

@dev-panpic
Copy link

dev-panpic commented Feb 16, 2022

Great. Thank you so much

@phananhtrung
Copy link

phananhtrung commented Mar 21, 2022

có vẻ đã hoàn thiện. cảm ơn bạn

@longnguyen28297
Copy link

longnguyen28297 commented May 10, 2022

Cảm ơn bạn

@PainterHalver
Copy link

PainterHalver commented May 24, 2022

Cảm ơn bạn nhiều

@minhquyn1204
Copy link

minhquyn1204 commented Jul 5, 2022

cảm ơn tiền bối

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment