Paste the same paragraph into three word counters and you can get three different numbers. Not because two of them are broken — because “how many characters is this?” turns out to have several defensible answers. Toolsyy’s Word & Character Counter shows six figures live as you type. This is what each one actually measures, and where each one will surprise you.
A word is whatever whitespace says it is
The counter trims your text and splits it on runs of whitespace —
text.trim().split(/\s+/). Whatever sits between two spaces is
one word. That single rule explains almost every question people ask about
the number.
- Hyphenated compounds are one word. A hyphen is not whitespace, so
well-knowncounts once. - Extra spacing is free. The
+in/\s+/matches the whole run, so double-spacing after a full stop, tabs, and line breaks do not inflate the total. - An unspaced em dash glues two words together.
this—thatis one word;this — thatis two. Most style guides set em dashes unspaced, so a dash-heavy draft counts slightly fewer words than a human would.
That rule also has an honest limit worth stating plainly: scripts
that do not use spaces do not get counted. A line of Chinese,
Japanese or Thai is one unbroken run of characters, so the counter reports
one word however long it is. Eighteen characters of Chinese prose come back
as 1.
This is not a bug that a better regular expression fixes. Segmenting Chinese into words requires a dictionary and a model of the language, which is a genuinely hard problem — it is why word processors disagree with each other on the same file. If you are working in one of those scripts, read the character count and ignore the word count.
Characters, and the emoji problem
text.length in JavaScript does not return the number of
characters you can see. It returns the number of UTF-16 code
units — how many 16-bit slots the string occupies in memory. For
plain English the two numbers are identical, which is exactly why the
difference goes unnoticed until it matters:
- 😀 counts as 2
- 🇬🇧 counts as 4 — a flag is two regional indicator letters, and each of those is itself a pair
- 👨👩👧👦 counts as 11 — four people plus the invisible joiners holding them together
So a post with five emoji in it is fifteen characters longer than it looks.
There is a subtler version that catches text pasted out of Word or Notes.
The word café can be stored two ways: as four characters ending in
a single precomposed é, or as five, with a plain e
followed by a combining acute accent. They render identically on screen.
They count as 4 and 5. Which one you have
depends on what typed it, and nothing in the text will tell you.
Both totals are shown, with and without spaces, because character limits disagree about whether spaces count. Social platforms almost always include them; some academic and publishing limits do not. When a specification does not say, assume they are included — it is the stricter reading.
One thing this number is not good for: predicting what a platform will tell you. X normalises text and weights some character ranges differently. SMS is worse — a single emoji switches the message from GSM-7 to UCS-2 encoding and drops the per-segment limit from 160 characters to 70. This tool reports what your text contains. What a platform charges you for it is that platform’s own arithmetic.
Why the sentence count is the least reliable number
Sentences are found with text.match(/[^.!?]+[.!?]+/g) — a run
of characters that are not terminators, followed by one or more that are.
It is the standard approach, and it is wrong in predictable ways, because
in English a full stop does more than one job.
Dr. Smith arrived.→ 2 sentences. The abbreviation’s full stop is indistinguishable from a terminal one.It cost 3.50 in total.→ 2 sentences. Same cause, this time a decimal point.Dr. Smith went to Washington D.C. yesterday.→ 4.
Two things it does get right, both worth knowing:
- An ellipsis is treated as one terminator rather than three, because
[.!?]+is greedy.Wait... what?is correctly two sentences, not four. - Text with no terminator at all falls back to one sentence, so a headline or a quick note reads as
1rather than0.
The case to watch for is the opposite one: a trailing unterminated
sentence is not counted at all. One. Two reports one
sentence, because Two has nothing to end it and so never
matches the pattern. Finish the sentence and it appears.
Doing better means an abbreviation dictionary and per-language rules — a lot of machinery for a figure most people are sanity-checking rather than relying on. Use it to compare two drafts, not to certify one.
Paragraphs count line breaks, not blank lines
Paragraphs come from text.split(/\n+/) with blank entries
discarded. Because the split is on runs of newlines, pressing
Enter twice between paragraphs — or five times — makes no difference to the
total.
The consequence worth knowing is that a single line break also starts a new paragraph. Ordinary prose is unaffected, since its paragraphs are separated by blank lines anyway. But a fourteen-line sonnet reports fourteen paragraphs, and so does a pasted address block or a bulleted list.
Reading time always rounds up
Reading time is Math.ceil(words / 200) with a floor of one
minute. Two things follow from that:
- 200 words is 1 min; 201 words is 2 min. The estimate steps at each multiple of 200 rather than easing upward, so one word can move it a whole minute.
- Anything at all is at least 1 min, including a five-word sentence.
Two hundred words per minute is a conventional figure for adult silent reading of ordinary prose. Real speeds vary widely: technical writing carrying code or formulae runs a good deal slower, familiar light material considerably faster. It is a sound number for comparing two drafts of the same piece and a poor one for promising a reader anything.
Your draft stays in this browser
All six figures are computed from your keystrokes locally — nothing is uploaded, and there is no server to upload it to. The text itself is kept in this browser’s local storage as you type, so closing the tab or following a link and coming back does not lose your work. It stays on your device, and you can clear anything that has been kept from the privacy page.
FAQ
Why does an emoji count as two characters?
The character count measures UTF-16 code units, which is what a JavaScript string length returns. Most emoji occupy two of those units, a flag emoji occupies four, and a family emoji held together by joiners can reach eleven. Ordinary letters occupy one each, so the gap only appears once emoji are in the text.
Why does Chinese or Japanese text count as one word?
Words are counted as runs of characters separated by whitespace, and those scripts do not put spaces between words, so an entire line comes back as a single word. For text in those languages the character count is the meaningful one. Splitting them into words correctly needs a dictionary, which is why word processors disagree here too.
Why is the sentence count higher than the number of sentences I wrote?
Sentences are found by looking for full stops, question marks and exclamation marks, but a full stop also ends an abbreviation and separates a decimal. A title such as Dr. Smith or a price such as 3.50 therefore splits one sentence into two. The count is a useful approximation rather than an exact figure.
Does the character count match the one on X or in SMS?
Not always, because those platforms apply their own arithmetic. X normalises the text and weights some character ranges differently, and a single emoji switches an SMS from GSM-7 to UCS-2 encoding, which cuts the per-segment limit from 160 characters to 70. This tool reports what your text contains rather than what a particular platform will charge for it.
Is my text saved or sent anywhere?
Nothing is transmitted. Counting happens on your keystrokes in this browser, and your draft is kept in this browser local storage so that closing the tab or following a link does not lose it. It stays on your device, and you can clear what has been kept from the privacy page.
Related guides
- Every text case, and when to use it — the real title-case rules for the headline you just counted.
- How a diff actually works — comparing two drafts instead of measuring one.
- URL encoding explained — what happens to that title when it becomes a slug, and why the same emoji gets longer again.
- Base64 encoding, explained — how text survives a system that only accepts plain ASCII.
Try it now: Free Word & Character Counter