Diễn đàn

Remove vietnamese accent javascript / Bỏ dấu tiếng Việt

unction stringToSlug(str) {
// remove accents
var from = "àáãảạăằắẳẵặâầấẩẫậèéẻẽẹêềếểễệđùúủũụưừứửữựòóỏõọôồốổỗộơờớởỡợìíỉĩịäëïîöüûñçýỳỹỵỷ",
to = "aaaaaaaaaaaaaaaaaeeeeeeeeeeeduuuuuuuuuuuoooooooooooooooooiiiiiaeiiouuncyyyyy";
for (var i=0, l=from.length ; i < l ; i++) {
str = str.replace(RegExp(from, "gi"), to);
}

str = str.toLowerCase()
.trim()
.replace(/[^a-z0-9\-]/g, '-')
.replace(/-+/g, '-');

return str;
}

Trả lời chủ đề này Chia sẻ trên dòng thời gian

1 Trả lời

Avatar

Tuấn Nguyễn·

Thank you anh, em adapt được logic của anh vào project của em. Em có thêm 1 gợi ý trong lúc em sử dụng:
Em chia "dấu tiếng Việt" thành 2 loại:

tone mark: các thanh (sắc, huyền, hỏi, ngã, nặng)
diacritical marks: dấu phụ (ă,â,ê,ô,ơ,ư,đ) tụi nó vẫn thuộc bảng chữ cái tiếng Việt. Case em dùng là để loop qua "pangrams tiếng Việt"
tiếng Anh: The quick brown fox jumps over the lazy dog
tiếng Việt: Trường ở quê sạch và đẹp lắm do bố xây kĩ
Nên code sẽ có 2 options: (0) xóa toàn bộ dấu; (1) chỉ xóa tone mark

function stringToSlug(str, option = 0) {
var from, to;
// remove all marks (Latin alphabet)
if(option === 0){
from = "àáãảạăằắẳẵặâầấẩẫậèéẻẽẹêềếểễệđùúủũụưừứửữựòóỏõọôồốổỗộơờớởỡợìíỉĩịäëïîöüûñçýỳỹỵỷ",
to = "aaaaaaaaaaaaaaaaaeeeeeeeeeeeduuuuuuuuuuuoooooooooooooooooiiiiiaeiiouuncyyyyy";
}

//remove tone mark (Vietnamese alphabet)
if(option === 1){
from = "àáãảạăằắẳẵặâầấẩẫậèéẻẽẹêềếểễệđùúủũụưừứửữựòóỏõọôồốổỗộơờớởỡợìíỉĩịäëïîöüûñçýỳỹỵỷ",
to = "aaaaaăăăăăăââââââeeeeeêêêêêêđuuuuuưưưưưưoooooôôôôôôơơơơơơiiiiiaeiiouuncyyyyy";
}