Convert text to Sentence case

Sentence case lowercases the whole input then capitalises the first letter of each sentence. Paste any text and the result updates as you type. Sentence boundaries are detected at ., !, and ? followed by whitespace. Need every word capitalised? Switch to title case; need everything down? Use lowercase.

Input
Line 1:1 LF cloud_done Saved locally
Result Sentence Case
0 lines 0 chars

Sentence case for prose

Sentence case is the standard layout for body copy: the first letter of each sentence is capital, the rest lowercase. The transform first lowercases the whole input, then walks the text and re-capitalises any letter that sits at the start of the buffer or directly after a sentence-ending punctuation mark followed by whitespace.

Punctuation that triggers a new sentence is ., !, and ?. Other marks (commas, semicolons, colons, em-quotes) do not start a new sentence. The whitespace requirement matters: U.S.A. stays as one token because there is no space between the dot and the next letter, while End. Start. correctly capitalises both sentences.

Sentence case is the natural cleanup tool when text arrives in ALL CAPS, mIxEd cAsE, or with random first-letter capitalisation from headline-style copy. For finer control over headline-style word boundaries, see title case; for the simpler "every word's first letter" rule, see capitalize words.

How to use convert text to sentence case

  1. 1Paste or type your text into the input panel on the left.
  2. 2The result updates as you type: every letter is lowercased, then the first letter of each sentence is re-capitalised.
  3. 3Check the output for sentence boundaries the regex missed (initials, abbreviations) and adjust the input.
  4. 4Click Copy in the output header to copy the result.
  5. 5Click Download to save the result as a plain-text file.

Keyboard shortcuts

Drive TextResult without touching the mouse.

Shortcut Action
Ctrl FOpen the find & replace panel inside the input Plus
Ctrl ZUndo the last input change
Ctrl Shift ZRedo
Ctrl Shift EnterToggle fullscreen focus on the editor Plus
EscClose find & replace, or exit fullscreen
Ctrl KOpen the command palette to jump to any tool Plus
Ctrl SSave current workflow draft Plus
Ctrl PRun a saved workflow Plus

What this tool actually does

Two-pass transform

The engine first runs String.prototype.toLowerCase() on the whole input, then re-walks it with the regex /(^\s*\w|[.!?]\s+\w)/g, uppercasing every letter that matches. The two-pass design is what flattens shouty input HELLO WORLD down to Hello world in one go.

Sentence boundaries: . ! ?

A sentence ends at a period, exclamation mark, or question mark followed by whitespace. The next word-character after that whitespace is capitalised. Other punctuation (commas, colons, semicolons) does not start a new sentence.

First word of the text

The very first word-character in the buffer is also capitalised, even if it is preceded by leading whitespace. Empty inputs return an empty string.

Diacritics preserved

Lowercase mapping uses Unicode rules, so accents stay attached. RÉSUMÉ. CAFÉ. becomes Résumé. Café. with diacritics intact.

Initials and abbreviations

The detector looks for whitespace after the dot. U.S.A. and e.g. stay as single tokens because there is no space between the marks. e.g. example will capitalise Example after the second dot, which is a known limitation; rewrite the abbreviation if you need the next word lowercase.

Worked example

Every sentence-starting letter is now capital and the body is lowercased. Note the second line has no terminal punctuation; that's fine, the leading The is still capitalised because it begins the buffer (after the newline counts as start-of-line whitespace for the regex).

Input
this is sentence one. this is sentence two! and a question?
the QUICK brown FOX jumps OVER the lazy dog
Output
This is sentence one. This is sentence two! And a question?
The quick brown fox jumps over the lazy dog

Settings reference

Behaviour Effect on output
Whole-text lowercase Pass one runs toLowerCase() on the entire input. HELLO -> hello.
Start-of-text letter Capitalised. Leading whitespace is allowed.
After . ! ? + whitespace Next word-character is capitalised. End. start. -> End. Start..
After , ; : - and other marks No capitalisation. The case stays as set by pass one.
Initials with no space (U.S.A.) Treated as one token because there is no whitespace between marks. The leading U capitalises if it starts a sentence.
Whitespace and line endings Unchanged. LF stays LF, CRLF stays CRLF.

FAQ

Does it handle questions and exclamations?
Yes. The regex matches ., !, and ? equally. are you ok? yes! becomes Are you ok? Yes!
What about abbreviations like e.g. or U.S.A.?
The detector requires whitespace after the dot, so abbreviations with no internal space (U.S.A.) stay as one token. e.g. followed by a space will capitalise the next word, which is a known limitation; rewrite the abbreviation if that bothers you.
Will it capitalise after a colon?
No. Sentence case treats only ., !, and ? as sentence endings. A colon mid-line does not start a new sentence.
Does it strip my line breaks?
No. Line breaks pass through. If a line begins without sentence-ending punctuation on the previous line, the first letter of the new line is still capitalised because the regex anchors on whitespace at the start of the buffer.
How is this different from capitalize-words?
Sentence case capitalises only the first letter of each sentence. Capitalize words capitalises every word's first letter. Title case adds extra rules on top (acronyms, force-caps, ignore lists).