Phân loại ký tự tách đoạn văn bạn dán vào thành 6 nhóm: chữ cái, chữ số, dấu câu, ký hiệu, khoảng trắng và emoji, trong đó chữ cái được chia tiếp thành chữ hoa, chữ thường và chữ có dấu tiếng Việt. Bảng thứ hai liệt kê từng dấu câu, ký hiệu và ký tự lạ kèm mã Unicode, số lần xuất hiện. Mọi phép đếm chạy trên trình duyệt, không lưu dữ liệu.
Cách phân loại ký tự theo nhóm Unicode
Mỗi ký tự nhìn thấy được xếp vào đúng một nhóm, dựa trên loại mà bảng mã Unicode gán sẵn cho nó, không dựa trên cảm nhận “trông giống dấu” hay “trông giống chữ”.
- Văn bản được chuẩn hoá NFC rồi tách thành grapheme, tức ký tự người đọc nhìn thấy. Chữ “ệ” gõ theo kiểu tổ hợp (e + dấu mũ + dấu nặng) vẫn là 1 ký tự.
- Grapheme nào là emoji, kể cả emoji ghép như cờ hay gia đình, vào nhóm emoji trước tiên.
- Các ký tự còn lại xét theo loại Unicode: khoảng trắng; chữ cái (nhóm L, tách hoa và thường); chữ số (nhóm N); dấu câu (nhóm P); ký hiệu (nhóm S).
- Chữ cái được tính là có dấu khi tách ra thấy dấu kết hợp, hoặc khi đó là đ, Đ.
- Ký tự không thuộc nhóm nào, như ký tự điều khiển hay zero-width space, rơi vào dòng “Khác”.
| Nhóm trên công cụ | Loại Unicode | Ví dụ |
|---|---|---|
| Chữ cái | L (Letter) | a, Ă, ệ, đ, chữ Hán, chữ Thái |
| Chữ số | N (Number) | 0–9, ½, ² |
| Dấu câu | P (Punctuation) | . , ! ? ( ) “ ” – … % # @ & |
| Ký hiệu | S (Symbol) | ₫ $ € + = < > © ^ ~ |
| Khoảng trắng | dấu cách, tab, xuống dòng | kể cả dấu cách không ngắt (NBSP) |
| Khác | ký tự điều khiển, định dạng | U+200B, gạch nối mềm U+00AD |
Quy tắc chuẩn hoá và tách grapheme dùng chung cho mọi công cụ trên site, được giải thích ở trang phương pháp đếm. Tổng ký tự của công cụ phân loại ký tự vì thế luôn khớp với số ký tự (có dấu cách) ở các công cụ đếm khác.
Dấu phần trăm là dấu câu, dấu cộng là ký hiệu
Theo Unicode, % # @ & * / thuộc nhóm dấu câu, còn + = < > ^ ~ và các ký hiệu tiền tệ ₫ $ € thuộc nhóm ký hiệu.
Cách xếp này dựa trên lịch sử bảng mã hơn là cách người Việt gọi tên. Người soát bài thường nghĩ “@” hay “%” là ký tự đặc biệt, nhưng Unicode đặt chúng cạnh dấu chấm, dấu phẩy. Tôi giữ nguyên cách xếp đó vì con số khi ấy khớp với biểu thức \p{P} và \p{S} mà lập trình viên dùng trong JavaScript, Python hay PHP; tự đặt nhóm theo cảm tính thì mỗi nơi ra một kết quả.
Chỗ hay nhầm nhất là chữ “đ” sau giá tiền. Viết “250.000đ” thì “đ” là chữ cái thường, còn “250.000₫” dùng ký hiệu đồng U+20AB và ký tự đó nằm trong nhóm ký hiệu. Nhìn trên màn hình hai cách gần như giống nhau.
Ví dụ: bản thảo cộng tác viên gửi về toà soạn
Ba đoạn trong bảng là kết quả thật của công cụ; hai dòng đầu nằm trong bộ kiểm thử.
| Văn bản | Chữ cái (hoa / có dấu) | Chữ số | Dấu câu | Khoảng trắng | Tổng ký tự |
|---|---|---|---|---|---|
| Giá 250.000đ! | 4 (1 / 2) | 6 | 2 | 1 | 13 |
| Hôm nay trời đẹp. Tôi đi học! | 21 (2 / 7) | 0 | 2 | 6 | 29 |
| “Sách hay” – “đọc chậm” – 2026… | 14 (1 / 4) | 4 | 7 | 6 | 31 |
Ở dòng đầu, dấu chấm ngăn nghìn trong 250.000 được tính là dấu câu, cùng nhóm với dấu chấm than cuối câu. Dòng thứ hai có 7 chữ có dấu: ô, ờ, ẹ, ọ, ô và hai chữ đ, dù “đ” không mang dấu thanh.
Dòng thứ ba là loại đoạn mà biên tập viên hay gặp khi ghép bài từ nhiều nguồn. Bảng chi tiết bên dưới công cụ tách 7 dấu câu thành 6 dòng: dấu ngoặc kép thẳng U+0022 xuất hiện 2 lần, ngoặc kép mở U+201C và đóng U+201D mỗi thứ 1 lần, gạch nối U+002D, gạch ngang U+2013 và dấu ba chấm liền U+2026. Chỉ một câu mà lẫn hai kiểu ngoặc, hai kiểu gạch. Trước khi dàn trang, bạn biết ngay chỗ nào cần thống nhất.
Trường hợp đặc biệt khi phân loại ký tự
Một số ký tự không nằm ở nhóm mà người dùng đoán, chủ yếu vì emoji, ký tự ẩn và chữ số viết bằng chữ cái.
- Emoji gia đình ghép từ 5 code point vẫn tính 1 emoji. Dấu © đứng một mình không phải emoji mà là ký hiệu.
- Zero-width space và gạch nối mềm không hiện trên màn hình nhưng vẫn hiện trong bảng chi tiết với nhãn “Khác” và mã U+. Cần biết chúng nằm sau chữ nào thì dùng công cụ tìm ký tự ẩn.
- Dấu cách không ngắt (NBSP) dán từ web được tính là khoảng trắng, nên bảng phân loại không báo lạ; công cụ tìm ký tự ẩn thì có.
- Số La Mã gõ bằng chữ I, V, X là chữ cái hoa, không phải chữ số.
- Chữ “Đ” được tính một lần ở dòng chữ hoa và một lần ở dòng chữ có dấu; hai dòng con này không cộng lại thành tổng chữ cái.
Công cụ liên quan
- Đếm ký tự online khi bạn chỉ cần tổng số ký tự có và không có dấu cách để so với một giới hạn.
- Phát hiện ký tự ẩn chỉ ra vị trí zero-width space, NBSP, BOM và xoá chúng khỏi văn bản.
- Đếm emoji liệt kê từng emoji, số lần dùng và số code point, hữu ích khi dòng emoji ở đây lớn bất thường.
- Đếm byte UTF-8 cho biết mỗi nhóm ký tự tốn bao nhiêu byte, vì chữ có dấu nặng hơn chữ không dấu.
- Chuyển chữ hoa thường sửa nhanh đoạn bị gõ nhầm Caps Lock sau khi thấy số chữ hoa quá nhiều.
Câu hỏi thường gặp
Dấu chấm trong số 250.000 có tính là dấu câu không?
Có. Công cụ xét từng ký tự theo loại Unicode, không xét vị trí, nên dấu chấm ngăn nghìn và dấu phẩy thập phân đều nằm trong nhóm dấu câu. Chuỗi “Giá 250.000đ!” vì vậy có 6 chữ số và 2 dấu câu. Chữ số được đếm từng ký tự, nên 250.000 là 6 chữ số chứ không phải 1 số.
Chữ đ có được tính là chữ có dấu không?
Có. Công cụ tính đ và Đ vào dòng chữ có dấu tiếng Việt, cùng với các chữ mang dấu mũ, dấu móc hay dấu thanh như ô, ư, ệ. Lý do là “đ” không có trong bảng chữ Latinh cơ bản và chiếm 2 byte UTF-8 như â hay ơ. Mẫu “Hôm nay trời đẹp. Tôi đi học!” có 7 chữ có dấu, trong đó 2 chữ là đ.
Làm sao đếm số chữ hoa trong một đoạn văn?
Dán đoạn văn vào ô phía trên và xem dòng “chữ hoa” trong bảng phân loại, ngay dưới dòng chữ cái. Chữ hoa có dấu như Ả, Ê, Đ đều được tính. Tỉ lệ chữ hoa cao bất thường thường là dấu hiệu tiêu đề gõ toàn chữ in hoặc bị bật Caps Lock khi gõ.
Phân loại ký tự có đếm dấu cách và xuống dòng không?
Có. Dấu cách, tab, dấu xuống dòng và dấu cách không ngắt đều vào nhóm khoảng trắng, và nhóm này được cộng vào tổng ký tự. Muốn biết riêng bao nhiêu dấu cách, bao nhiêu tab hay dòng trống thì công cụ đếm khoảng trắng tách chi tiết hơn. Cột phần trăm cho thấy khoảng trắng chiếm bao nhiêu phần văn bản.
Có nên dùng công cụ này để kiểm tra mật khẩu đủ chữ hoa, chữ số, ký tự đặc biệt không?
Về kỹ thuật thì được, vì “ký tự đặc biệt” trong quy tắc mật khẩu thường gồm cả nhóm dấu câu lẫn nhóm ký hiệu ở đây. Dù công cụ chạy trên trình duyệt và không gửi dữ liệu đi, tôi vẫn khuyên không dán mật khẩu thật vào bất kỳ trang web nào. Hãy thử với một chuỗi có cấu trúc tương tự.
Căn cứ và nguồn
- UAX #44: Unicode Character Database — Unicode Consortium: thuộc tính General_Category (L, N, P, S…) dùng để xếp nhóm.
- UAX #29: Unicode Text Segmentation — Unicode Consortium: quy tắc tách grapheme, cơ sở để đếm “ký tự nhìn thấy”.
- TCVN 6909:2001, bộ mã tiếng Việt Unicode dạng dựng sẵn: cơ sở để chuẩn hoá NFC trước khi phân loại.
Kiểm tra: 16/09/2026. Phân loại theo dữ liệu Unicode mà trình duyệt của bạn tích hợp; trình duyệt quá cũ có thể chưa nhận ra vài emoji mới.