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
| Regex | Giữ chữ/số/_ | Giữ space | Unicode | Hỗ trợ trình duyệt |
|---|---|---|---|---|
/\W/g | Có | Không | Không | Tất cả |
/[^\w\s]/g | Có | Có | Không (chỉ ASCII word) | Tất cả |
/[^\p{L}\p{N}\p{M}\p{Pc}\s]/gu | Có (Unicode) | Có | Có | Chrome 64+, FF 78+, Safari 14+ |
Lưu ý
\wtrong 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 flagu. - Performance: regex Unicode chậm hơn ASCII — chỉ dùng khi cần.