Để hỗ trợ việc tìm kiếm đa ngôn ngữ, cụ thể đối với tiếng Việt, nếu chỉ so sánh chuỗi ký tự thông thường chúng ta sẽ gặp khó khăn trong việc tìm kiếm các kết quả là chuỗi ký tự có dấu. Việc chuyển đổi từ chuổi có dấu sang chuổi không dấu giúp chúng ta tìm kiếm được nhiều trường hợp hơn, và có thể bỏ qua một số lỗi chính tả vì sai dấu.

Tại sao cần chuyển tiếng Việt có dấu sang không dấu?

Vì hỗ trợ tìm kiếm từ

Mã nguồn javascript dưới đây là một ví dụ để chuyển đổi tất cả các ký tự tiếng việt có dấu sang ký tự latin.

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

Bonus: Đoạn mã này dùng để chuyển đổi tất cả các ký tự đặc biệt thành khoảng trắng.

var specialCharacterToBlankSpace = function (paragraph) {
  return paragraph
      .replace(/,|.|\/|>|<|\?|;|:|'|"|`|~|!|@|#|$|%|^|&|\*|\(|\)|_|-|=|\+|[|]|\\/g, " ");
}

Nếu muốn giữ lại duy nhất một ký tự khoảng trắng giữa các từ thì sử dụng như sau:

string.replace(/ +/g, " ");

DEMO