Word counter
Whitespace-split words after trim, string-length characters, ASCII [.!?]+ sentences, LF-only paragraphs. Reading time is Math.ceil(words / 200).
Docify's word counter counts words, characters, sentences, and paragraphs in your browser. Words are whitespace-delimited tokens: twenty-one, don't, and CJK with no spaces such as 你好世界 are each one word. Characters use the JavaScript string length (UTF-16 code units), so 😀 is two units. Sentences split on ASCII [.!?]+ only: 你好。世界。 is 1 sentence, Hello with no terminator is 1, and ??? is 0. Paragraphs split on LF only (/\n+/): hello plus a lone CR plus world is 2 words and 1 paragraph; hello plus LF plus world is 2 paragraphs. Reading time is Math.ceil(words / 200). Nothing is uploaded.
0
Words
0
Characters
0
No spaces
0
Sentences
0
Paragraphs
0
Min read
Text
How it works
- Paste or type into the box. Counts update locally as the text changes.
- Words are the trimmed string split on one or more whitespace characters (spaces, tabs, and line breaks). Hyphenated
twenty-oneand contractions such asdon'tare one token. CJK with no spaces, such as你好世界, is one word.你好 世界(with a space) is two. - Characters use the JavaScript string length (UTF-16 code units); the no-spaces figure removes all whitespace. An emoji such as
😀is two units. Sentences split on one or more ASCII.?!characters ([.!?]+). Empty chunks are dropped, soHello!!!is 1 sentence and???is 0.Hellowith no terminator is 1.3.14increments likeDr.. Ideographic。and fullwidth?/!do not split, so你好。世界。is 1 sentence. Paragraphs split on one or more LF characters (/\n+/), not CR.hello\nworldis 2 paragraphs.hello\rworldis 2 words and 1 paragraph.hello\r\nworldis 2 paragraphs because the LF splits and leftover CR is trimmed. UnicodeU+2028/U+2029also split words but not paragraphs. Reading time isMath.ceil(words / 200)minutes.
FAQ
- Does this word counter upload my text?
- No. Counts update in your browser as you type. The page does not send the text to a server.
- How are words counted?
- After trimming leading and trailing whitespace, the tool splits on one or more whitespace characters (spaces, tabs, CR, LF, and other \s). Consecutive spaces count as one separator. An empty or all-whitespace box is 0 words. A lone CR is whitespace, so hello plus CR plus world is 2 words. Hyphenated forms such as twenty-one and contractions such as don't are one token because they contain no whitespace. CJK text with no spaces, such as 你好世界, is one word. 你好 世界 (with a space) is two. This is not Microsoft Word or Google Docs.
- How is reading time calculated?
- Minutes to read is Math.ceil(word count / 200), using 200 words per minute. Short texts still show 1 minute once there is at least one word. This is a rough estimate, not a measured reading speed.
- How are characters, sentences, and paragraphs counted?
- Character totals use the JavaScript string length (UTF-16 code units). The no-spaces figure removes all whitespace. An emoji such as 😀 is two units (a surrogate pair). Sentences are chunks split on one or more ASCII periods, question marks, or exclamation points ([.!?]+). Empty chunks are dropped, so Hello!!! is 1 sentence and ??? is 0. A string with no terminator, such as Hello, is 1 sentence. Abbreviations such as "Dr." and decimals such as 3.14 increment the count. Ideographic 。 and fullwidth ? / ! do not split — 你好。世界。 is 1 sentence. Paragraphs are non-empty blocks split on one or more LF characters (/\n+/), not CR. hello plus LF plus world is 2 paragraphs. hello plus a lone CR plus world is 2 words and 1 paragraph. hello plus CRLF plus world is 2 paragraphs because the LF splits and leftover CR is trimmed. Unicode line/paragraph separators U+2028 / U+2029 also split words but not paragraphs. This is not a Unicode paragraph tokenizer.