Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Xóa ký tự non-word (không phải chữ/số/_ ) trong JavaScript

Non-word characters: ký tự không phải chữ cái, số, gạch dưới (_). Dùng regex \W (viết tắt của [^A-Za-z0-9_]) hoặc pattern Unicode mở rộng.

Cách 1: Regex \W đơn giản (ASCII only)

<script>
  function xoaNonWordASCII(str) {
    return String(str).replace(/\W/g, '');
  }

  document.write(xoaNonWordASCII('Tutorix is the ~!@#$%^&*() best platform'));
  // "Tutorixisthebestplatform" — MẤT KHOẢNG TRẮNG (space là non-word)
</script>

Cách 2: Giữ lại khoảng trắng (thường dùng hơn)

function xoaNonWordGiuSpace(str) {
  return String(str).replace(/[^\w\s]/g, '');
  // \w = word char, \s = whitespace → giữ chữ, số, _, space, tab, newline
}

document.write(xoaNonWordGiuSpace('Tutorix is the ~!@#$%^&*() best platform'));
// "Tutorix is the best platform"

Cách 3: Pattern Unicode mở rộng (hỗ trợ tiếng Việt, tiếng Pháp...)

function xoaNonWordUnicode(str) {
  // \p{L} = Unicode letter, \p{N} = number, \p{M} = mark, \p{Pc} = connector punctuation (_)
  // u flag: Unicode mode (ES2018+)
  return String(str).replace(/[^\p{L}\p{N}\p{M}\p{Pc}\s]/gu, '');
}

document.write(xoaNonWordUnicode('Tiếng Việt: àáâãèéêìíòóôõùúýĐ!@#'));
// "Tiếng Việt: àáâãèéêìíòóôõùúýĐ"

So sánh

RegexGiữ chữ/số/_Giữ spaceUnicodeHỗ trợ trình duyệt
/\W/gCóKhôngKhôngTất cả
/[^\w\s]/gCóCóKhông (chỉ ASCII word)Tất cả
/[^\p{L}\p{N}\p{M}\p{Pc}\s]/guCó (Unicode)CóCóChrome 64+, FF 78+, Safari 14+

Lưu ý

  • \w trong JS chỉ match ASCII [A-Za-z0-9_] — không match chữ có dấu.
  • Cần hỗ trợ tiếng Việt/Unicode → dùng Unicode property escapes (\p{L}) với flag u.
  • Performance: regex Unicode chậm hơn ASCII — chỉ dùng khi cần.