Word Counter& Reading Time
Real-time word, character, paragraph count with reading time estimate. Fully local — your text never leaves your browser.
Enter your text
Stats update in real time as you type
Statistics
—
Estimated reading timeChinese ~500 chars/min · English ~200 words/min
CJK Characters—Chinese, Japanese, Korean
English words—whitespace-separated
Characters—including spaces
Characters (no spaces)—excluding whitespace
Paragraphs—separated by blank lines
Sentences—. ! ? 。!? …
UTF-8 byte size—
Did this tool solve your problem?
Code Examples
JavaScript
const text = "Hello 世界"; // CJK characters (Chinese, Japanese, Korean) const cjk = (text.match( /[\u4e00-\u9fff\uac00-\ud7af]/g ) ?? []).length; // 2 // English words const words = (text.match( /[a-zA-Z][a-zA-Z'-]*/g ) ?? []).length; // 1 // Reading time (ms) const mins = cjk / 500 + words / 200;
Python
import re
text = "Hello 世界"
# CJK characters (Chinese, Japanese, Korean)
cjk = len(re.findall(
r'[\u4e00-\u9fff\uac00-\ud7af]', text
)) # 2
# English words
words = len(re.findall(
r'[a-zA-Z][a-zA-Z\'-]*', text
)) # 1
# Characters without spaces
no_sp = len(text.replace(" ", ""))TypeScript
function wordStats(text: string) {
const cjk = (text.match(
/[\u4e00-\u9fff\u3040-\u30ff\uac00-\ud7af]/g
) ?? []).length;
const words = (text.match(
/[a-zA-Z][a-zA-Z'-]*/g
) ?? []).length;
const paragraphs = text
.split(/\n\s*\n/)
.filter(p => p.trim()).length;
return { cjk, words, paragraphs };
}Go
import (
"regexp"
"unicode"
)
func countCJK(s string) int {
count := 0
for _, r := range s {
if unicode.Is(unicode.Han, r) ||
unicode.Is(unicode.Hangul, r) {
count++
}
}
return count
}
var wordRe = regexp.MustCompile(
`[a-zA-Z][a-zA-Z'-]*`)Frequently Asked Questions
How are CJK characters counted?
The tool counts Unicode CJK Unified Ideographs including common Chinese characters (U+4E00–9FFF), Extension A (U+3400–4DBF), Compatibility Ideographs (U+F900–FAFF), Japanese Hiragana/Katakana (U+3040–30FF), and Korean Hangul Syllables (U+AC00–D7AF).
How are English words counted?
English words are counted as consecutive letter sequences, optionally including hyphens and apostrophes. For example: don't counts as 1 word, state-of-the-art counts as 1 word. Pure numbers are not counted as words.
How is reading time calculated?
Chinese reading speed is estimated at ~500 characters/minute (adult silent reading), and English at ~200 words/minute. For mixed text, both are calculated separately and summed for a more accurate estimate.
How are paragraphs defined?
A paragraph is a block of text separated by one or more blank lines. A single newline does not create a new paragraph — consistent with Markdown and most writing tools.
Is my text sent to any server?
No. This tool runs entirely in your browser. All calculations happen locally — your text never leaves your device, making it safe for sensitive documents.
What is the UTF-8 byte size used for?
The byte size shows how much storage the text actually takes in UTF-8 encoding. It's useful for checking database field limits (e.g. VARCHAR length), API request payload sizes, or file storage. Chinese characters typically take 3 bytes each in UTF-8.