A free word counter for words, characters, sentences, reading time and platform limits, updating as you type. Your text never leaves this tab.
Counting words is half the story. Short sentences and short words make text easier to read, this score updates as you edit above.
Your text is 58 words. Here's how that compares with common kinds of writing.
There is no single definition of a word. Splitting on spaces fails for Chinese, Japanese and Thai, which use none. Simple regexes break on contractions, e-mail addresses and accents. The Unicode word-boundary rules (UAX #29), run here by your browser’s Intl.Segmenter, handle all of these, using dictionaries for scripts without spaces.
text.trim().split(/\s+/)13What most quick scripts do. Counts “: ” and “$1,299.99” as words and sees a whole Chinese sentence as one./\w+/g22JavaScript’s \w is [A-Za-z0-9_] only, so “fährt” splits in two and non-Latin scripts count as zero./[\p{L}\p{N}'’-]+/gu20Unicode letters and digits plus apostrophes and hyphens. Good for spaced scripts; still one “word” per unspaced run.each CJK/Thai character = 112Word processors count each ideograph or kana as a word, since a character is closer to a word than a run is. Thai is included here for comparison only.Intl.Segmenter('en')19Rule-based boundaries plus dictionaries for Chinese, Japanese and Thai. Keeps “it’s” and “1,299.99” whole.What you see as one character (a grapheme) can be several Unicode code points, twice as many UTF-16 units, and up to four bytes per code point in UTF-8. Every platform picks one of these to enforce its limit, and X and SMS add rules of their own. All six counts below are computed live.
The unit behind each limit, and the result for the text currently in the counter above.
wordsWhitespace-delimited runs; each East Asian character counts as one word.58weighted chars280 weighted; URLs 23; CJK and emoji 2; NFC first.325septets / UTF-16GSM-7 160 (153 split) or UCS-2 70 (67 split).3 msgUTF-16 unitsThe value’s length in code units, so an emoji uses 2.325UTF-16 unitsString.length; [...s].length gives code points.325code pointslen(s) on str; len(s.encode()) gives UTF-8 bytes.325graphemesString.count uses extended grapheme clusters.325code pointsn characters in utf8mb4; row limit 65,535 bytes.325UTF-16 units (observed)Not documented; emoji appear to count as 2.325words650-word limit, counted by the form’s own counter.58bytes1-4 bytes per code point (RFC 3629).325