Why Two Word Counters Disagree
Paste the same paragraph into two counters and you will often get two numbers. Neither is broken; they are answering different questions, and the question is almost never written down. This page defines six counting rules, runs them over six texts that cover the awkward cases, and says which number to trust for which contract.
There is no single definition of “word”
The default rule — and the one this site uses — is a run of non-whitespace characters. It is fast, language-independent and reproducible, and it fails on precisely the things that make text interesting: hyphenated compounds, em dashes standing alone, URLs, email addresses, markdown syntax, and any East Asian language, which does not use spaces between words at all. Every disagreement between two counters is one of those cases surfacing.
The six rules
- whitespace runs — split on \S+ (this site’s Word Counter, read from its production source).
- apostrophe/hyphen-aware tokens — apostrophe/hyphen-aware word tokens, letters-or-digit required.
- CJK-aware — non-CJK runs + each CJK character counted separately.
- markdown stripped first — markdown punctuation removed, then \S+.
- characters without spaces and sentences — all characters except whitespace; runs ending in . ! or ?.
The measurements
Each row is a text; each column is a rule applied to it. Generated locally on Node v24.19.0, so you can reproduce every figure from the source at the bottom of the page.
| Sample text | Whitespace runs | Word-like tokens | CJK-aware | Markdown stripped | Chars (no spaces) | Sentences |
|---|---|---|---|---|---|---|
| plain prose | 18 | 18 | 18 | 19 | 77 | 2 |
| hyphens + em dash | 15 | 13 | 15 | 21 | 87 | 2 |
| markdown | 14 | 15 | 14 | 13 | 81 | 1 |
| mixed CJK | 9 | 6 | 32 | 9 | 55 | 1 |
| urls + emoji | 7 | 16 | 7 | 8 | 89 | 3 |
| numbers + units | 13 | 18 | 13 | 14 | 61 | 5 |
Reading the gaps
Hyphens and dashes. In the second sample the whitespace rule counts a compound like e-commerce as one word, which most style guides agree with — but an em dash surrounded by spaces counts as a word on its own, which no word processor does. That single artefact is responsible for a surprising share of “Word says 248, the website says 251” mismatches.
Markup. The markdown sample is the clearest illustration: headings, bold markers, link syntax and backticks are all non-whitespace runs, so a raw counter inflates the count. The last column shows the same text after punctuation stripping. If you draft in markdown and submit to a word limit, you are being measured on the stripped version and editing against the raw one.
URLs and addresses. A long URL is one word under the whitespace rule and roughly nothing under a rule that requires letters or digits in a token. For a listing or a bio with a character limit, the URL is measured in characters, and there the difference between 40 and 60 is the difference between fitting and not fitting.
Numerals and units. In the last sample, 1,250 is one token, $14.99 is one token, and 27.4% is one token. A rule that requires letters in a “word” discards all three, which is exactly what you must not do on a page whose value is the numbers.
Where “word” is the wrong unit entirely
Chinese, Japanese and Thai do not delimit words with spaces. Counting whitespace runs on Japanese prose gives a number that is closer to a count of phrase fragments than of words, and the mixed sample above shows the effect: the same sentence scores differently under the whitespace rule and under a rule that counts each CJK character individually. Korean and Thai sit in the same family of problems. If a limit is specified in characters for a CJK language, treat it as characters, and if a translation job is quoted per word, expect the vendor to count CJK by character and convert — that conversion rate is a commercial term, not a technical constant, and it is worth asking about before you sign.
Which number to trust, by contract
- University essays and job applications — whatever the institution’s stated tool says, usually Microsoft Word’s count. When in doubt, ask; a 5% discrepancy on a 2,000-word limit is 100 words.
- Translation invoices — source-language words, typically counted on the stripped text, sometimes on the translated segment. Confirm whether numbers and repeated segments count.
- Product listings and social bios — characters, and usually with spaces. Limits are enforced by the platform’s own counter, so use that one.
- Meta descriptions and titles — characters, with the caveat that what matters is pixel width, not character count, since a wide glyph set truncates earlier.
- Reading time — a model, not a measurement. This site divides words by 225 words per minute, which is a common on-screen average for adult native readers; skimming, tables and code make the real figure unpredictable in both directions.
What the counter on this site does, exactly
So you can check it against your own expectations, these are the rules as they appear in the page’s own script: words are (text.trim().match(/\S+/g) || []).length; characters are the raw string length including spaces and line breaks; characters without spaces remove every whitespace run; sentences are runs ending in a period, question mark or exclamation mark; paragraphs are blocks separated by a blank line; reading time is words divided by 225 per minute, rounded to a human-readable unit.
That is a whitespace-run counter with no markdown awareness and no CJK segmentation. It is the right default for Latin-script prose and the wrong tool for a Japanese manuscript or a markdown file with heavy formatting — and now you know which column of the table above to read instead.
Reproduce it yourself
Every figure on this page came from six lines of JavaScript, which you can paste into a browser console and run against your own text:
const words = t => (t.trim().match(/\S+/g) || []).length;
const nospace = t => t.replace(/\s/g, '').length;
const sentences = t => (t.match(/[^.!?]+[.!?]+/g) || []).length;
const cjk = t => (t.match(/[\u3040-\u30ff\u4e00-\u9fff]/gu) || []).length;
If a counter disagrees with these four lines, the difference is a definition, and definitions are negotiable in a way that bugs are not.
Frequently asked questions
Why is my count one or two higher than Word’s?
Most likely an em dash, an ellipsis written as three periods, or a footnote marker separated from its word by a thin space. Word attaches some of those to neighbours; a whitespace rule does not.
Do contractions count as one word?
Yes under every rule here: don’t is a single non-whitespace run. Some academic counting conventions expand contractions for billing, which is a contract term rather than a parsing fact.
Should I count the words in my headings?
If the limit is on body text, no; if it is a total, yes. The counters on this page do not distinguish them, so the honest answer is to state which you used.
Why does the reading time change when I add a table?
It should not, and it does not here — the estimate is purely word-count driven. Real reading time over a table is dominated by parsing the numbers, which no word counter can see.
Related tools
Word Counter
Words, characters, sentences, paragraphs and estimated reading time as you type. Free browser-based tool on this site. Runs locally, nothing is uploaded.
Word Frequency Counter
A ranked frequency list with stop-word removal — the fastest way to see what your text is actually made of.
Character Counter
With and without spaces, plus letter frequency, for hard character limits.
Case Converter
Eight letter cases, including the title-case rules that change how a headline reads.
Written and maintained by CHENYUWEN. First published 2026-10-30. If something here is wrong, tell us - corrections are dated on the page.