Nine cases, and the three rules that decide the result
Three different jobs hide behind one button. A headline pasted out of a PDF arrives in capitals. A product name has a capital in the middle that has to survive. A column heading has to lose its spaces and become a variable. The nine cards above run all three on the same text at once, so you pick the one that came out right instead of guessing first.
Three rules decide what they do, and they are worth knowing before you trust the output:
- A word with a capital inside it is left alone in Title Case and Sentence case, so iPhone, eBay, JavaScript and McDonald keep their shape.
- A word in all capitals with two or more letters counts as an acronym and is also left alone, but only while the rest of your text has at least one lowercase letter in it.
- If every letter you paste is a capital, nothing is preserved. In a block of caps there is no way to tell an acronym from a shouted word, so the whole thing is rebuilt. That is what makes an ALL CAPS paragraph fixable at all.
The counters read what you typed, not the result, and count characters as code points: an accented letter is one, an emoji with a skin tone modifier is two. For sentences, paragraphs and bytes, use the word counter.
Which of the nine you actually want
- UPPERCASE: short labels and buttons. Whole paragraphs in caps are slower to read, and some screen readers spell them out.
- lowercase: the safe first step for anything that arrived shouting.
- Title Case: headlines, article titles, menu labels, slide headers.
- Sentence case: body text, form hints, alt text, anything that reads as prose.
- camelCase: JavaScript and Java variables, function names, JSON keys.
- PascalCase: classes, React components, Go and C# exported names, type names.
- snake_case: Python variables, database columns, and file names that survive a shell without quoting.
- kebab-case: URL slugs, CSS class names, npm package names.
- aLtErNaTiNg: the mocking meme format, and nothing else.
The four code cases run line by line, so a pasted column of headings comes back as a column rather than one run on name. Apostrophes are deleted instead of splitting a word, so don’t stop me now gives dontStopMeNow, not donTStopMeNow.
How to rescue a block typed with caps lock on
- Paste the whole block in without fixing anything first. The acronym rule only stands down while the text is entirely capitals, and one lowercase letter switches it back on.
- Read the Sentence case card for prose, or the Title Case card for a heading.
- Repair the proper nouns and the acronyms. Nothing on the page knows that london is a city or that pdf was an abbreviation, and capitals destroyed the evidence before you got here.
- Press Copy, paste it back over the original, and fix that handful of words. Still faster than retyping the paragraph.
How to turn a label into a variable, column or URL slug
- Paste the labels one per line. A whole spreadsheet header row, pasted as a column, is converted line by line.
- Pick the target: camelCase for JavaScript keys, PascalCase for a class or component, snake_case for Python and database columns, kebab-case for a URL or a CSS class.
- Check the acronyms. XMLHttpRequest splits into xml_http_request and getUserByID into get-user-by-id, which is what most style guides ask for.
- Decide what to do about accented letters, which are kept rather than stripped. For a URL, percent-encode the slug with the URL encoder or replace those letters by hand.
- Check that nothing starts with a digit. This page formats, it does not validate, so 2nd_item comes out as typed and your compiler will object.
What Title Case leaves lowercase
Style guides disagree here: Chicago lowercases every preposition whatever its length, AP capitalizes those of four letters or more. The list used here is the practical middle, and short enough to check.
a, an, and, as, at, but, by, for, from, if, in, into, like, near, nor, of, off, on, onto, or, over, per, so, the, to, up, upon, via, vs, with, yet
The exceptions
- The first and last word of every lineis always capitalized, so A Room of One’s Own keeps its capital A.
- So is a word straight after a colon, full stop, question mark or exclamation mark, which is what makes Star Wars: The Empire Strikes Back come out right.
- Hyphenated compounds are judged part by part: state-of-the-art becomes State-of-the-Art, not State-Of-The-Art.
- The checkbox above the cards ignores the list completely. That style is usually called start case, and it is what the PROPER function does in Excel and Google Sheets.
Sentence case uses none of this. It capitalizes the first word of each sentence, keeps the preserved words described above, and restores the pronoun I along with I’m, I’ll, I’ve and I’d, the only single letters English capitalizes mid sentence by rule.
Getting the result out of the page
- Copy button: each card copies its own result. Paste with Ctrl+V, Cmd+V on a Mac, or a long press on a phone.
- If the copy fails: the in-app browsers inside Instagram, Facebook and LINE sometimes refuse clipboard access, and a warning says so. Select the text in the card and copy it by hand, or open the page in Safari or Chrome.
- Paste as plain text with Ctrl+Shift+V, or Cmd+Shift+V on a Mac, when the destination would inherit formatting.
- Line breaks survive every mode, so a list pasted in comes back as a list and drops straight into a spreadsheet column.
- Nothing is in the address bar. Your text is never written into the URL, so a copied link shares the tool, not what you typed.
The same job in an editor, a spreadsheet and CSS
- Word: select the text and press Shift+F3 to cycle lowercase, capitalized and uppercase, or use the Aa button on the Home tab.
- Google Docs: Format, then Text, then Capitalization.
- Excel and Google Sheets:
=UPPER(),=LOWER()and=PROPER(). PROPER is start case, so it capitalizes the a and the of too. - VS Code: the command palette has Transform to Uppercase, Lowercase, Title Case and Snake Case, none of them bound to a key by default.
- CSS:
text-transformchanges how text is drawn, not what the text is. Copy it out, read it with a screen reader or index it with a crawler and you get the original back. - Terminals:
tr a-z A-Zonly handles unaccented ASCII. Prefer awk with toupper and tolower, and expect none of them to know the rule below.
Where language changes the answer
Case belongs to the writing system, not to the alphabet. In Turkish and Azerbaijani the dotted and dotless i are separate letters, so the capital of i keeps its dot and the lowercase of I loses it. This page follows your browser language setting, so a Turkish browser gets the Turkish answer: correct there, surprising anywhere else. Greek differs again, lowering a word ending in sigma to the final form of the letter. Both come from the Unicode case mapping data, not from anything invented here.
What it cannot know
- Proper nouns cannot be recovered. Sentence case will not capitalize london or anna for you. Read the result before you ship it.
- Abbreviations end sentences early. A new sentence starts after any full stop, so the word after e.g. or Dr. gets a capital it should not have. Decimal numbers are safe, because a digit is not a letter.
- Case changes are not always reversible. The German sharp s becomes two letters when uppercased and never comes back; ligatures behave the same way. Check the length before pasting into a field with a limit.
- Some scripts have no case. Chinese, Japanese, Korean, Arabic, Hebrew and Thai pass through every mode unchanged. That is the right answer, not a failure.
- aLtErNaTiNg breaks accessibility. Screen readers often spell it out, and search engines treat it as a different string from the normal spelling. Keep it to jokes.
- Never run a password or key through it. Changing the case of a secret changes the secret, and there is no undo once you have pasted the result over the original.
Frequently asked questions
How do I convert text to Title Case?
Paste or type the text in the box at the top of this page and read the Title Case card. It is generated as you type, so there is no convert button to press. Press Copy on that card to put the result on your clipboard, then paste it wherever you need it with Ctrl+V on Windows or Cmd+V on a Mac. Short words such as a, an, the, of and on stay lowercase unless they are the first or last word; tick the checkbox above the cards if you want every word capitalized instead.
What is the difference between Title Case and Sentence case?
Title Case capitalizes the first letter of most words and is used for headlines, book titles and menu labels. Sentence case capitalizes only the first word of each sentence and leaves the rest alone, which is how ordinary prose is written. On this page Sentence case starts a new capital at the beginning of the text, after a line break, and after a full stop, question mark or exclamation mark.
Why did NASA become Nasa in one card and not the other?
A word written in all capitals with two or more letters is treated as an acronym and left alone in both Title Case and Sentence case, but only when the rest of your text contains at least one lowercase letter. If everything you paste is capitals there is no way to tell an acronym from a shouted word, so the whole block is lowercased and rebuilt. That is what makes it possible to rescue a paragraph typed with caps lock on. The four code cases and aLtErNaTiNg ignore the rule entirely, because an identifier has no room for it.
Does my text get uploaded anywhere?
No. Every conversion runs in your browser with ordinary JavaScript string functions, and nothing is sent to a server, written into the address bar or saved between visits. Closing the tab is enough to clear it. The only thing recorded is an anonymous event saying that a copy button was pressed and which of the nine cases it belonged to, never the text itself.
What is the difference between camelCase, PascalCase, snake_case and kebab-case?
They are four ways of joining words with no spaces. camelCase starts lowercase and capitalizes every later word, and is the usual style for JavaScript variables. PascalCase capitalizes the first word too, and names classes and React components. snake_case joins words with underscores and is common in Python and in database columns. kebab-case joins them with hyphens and is what URL slugs, CSS class names and file names normally use. All four on this page lowercase acronyms, so XMLHttpRequest becomes xml_http_request rather than XML_http_request.
Why is the UPPERCASE result longer than what I typed?
A few letters expand when they change case. The German sharp s becomes two letters, so strasse written with one becomes STRASSE with seven characters where the original had six. Ligature characters behave the same way, and the change is not reversible: lowercasing the result gives you two ordinary s letters back rather than the original. If the text is going into a field with a character limit, count the converted version rather than the one you typed.
Can I change case without leaving Word, Google Docs or Excel?
Yes, and for a long document it is usually quicker. In Microsoft Word select the text and press Shift+F3 to cycle through lowercase, capitalized and uppercase, or use the Aa button on the Home tab. Google Docs has Format, then Text, then Capitalization. In Excel and Google Sheets the formulas are UPPER, LOWER and PROPER, where PROPER capitalizes every word with no list of short words. Most code editors have commands for upper and lower case, and VS Code adds a Transform to Snake Case and a Transform to Title Case command.
Why do accented letters stay in the snake_case result?
Because removing them would change the word. A menu becomes cafe_menu only if something decides that the accent can be dropped, and for names such as Muller or Garcia that decision is wrong often enough to be worth avoiding. The identifier cases here keep every letter and only replace the separators. If you need a plain ASCII slug for a URL, percent-encode the result or strip the accented letters by hand after converting.
How does aLtErNaTiNg case handle spaces, digits and punctuation?
Only letters advance the pattern. Spaces, digits and punctuation are copied through untouched and do not flip the next letter, so the alternation stays in step across words instead of restarting after every space. The result always begins with a lowercase letter, which is the form most people mean when they use it for a sarcastic quote in a meme or a post.
Does any of this work on Chinese, Japanese or Korean text?
Only partly. Han characters, kana and hangul have no uppercase and lowercase forms at all, so they come through every mode unchanged, which is correct rather than broken. Latin letters mixed into the same text are still converted, and the code cases still treat the CJK characters as word characters rather than separators. Cyrillic and Greek do have case and are converted properly, including the Greek final sigma.
Sources
- MDN Web Docs, String.prototype.toLocaleUpperCase and toUpperCase, for the difference between the locale aware conversion used here and the plain one, including the Turkish example.
- MDN Web Docs, text-transform, for what a CSS only change does and does not affect.
- The mappings themselves, including multi character expansions such as the German sharp s and the Greek final sigma condition, come from the case mapping files of the Unicode Character Database, which is what browser engines implement.
- The ECMAScript language specification published by Ecma International defines how the JavaScript string case methods apply that data, at the time of writing.
- Title case conventions are summarised from the published style guides rather than copied: the Chicago Manual of Style lowercases all prepositions, AP style capitalizes those of four letters or more. Pick one and stay with it.
More text tools
To count what you pasted rather than convert it, the word counter gives characters, words, sentences, paragraphs and UTF-8 bytes. For a slug that has to be safe in a URL, the URL encoder takes the kebab-case result the rest of the way. For styled letters in a bio rather than a case change, see the Instagram font generator, and for placeholder copy to test a layout with, the lorem ipsum generator.
Related tools
- Word Counter & Character Count
Count words, characters with and without spaces, sentences and paragraphs as you type.
- URL Encoder and Decoder
Percent-encode or decode URLs and query strings with encodeURI or encodeURIComponent semantics.
- Instagram Fonts Generator (Fancy Text)
Turn plain text into fancy Unicode fonts for Instagram bios, captions and usernames: bold,…
- Lorem Ipsum Generator
Generate Lorem Ipsum placeholder text by paragraphs and sentences, or random Chinese fille…
Privacy: the conversion runs entirely in your browser. What you type is never uploaded, never written into the address bar and never stored between visits, so closing the tab clears it. Pressing a copy button records an anonymous analytics event naming only which of the nine cases was copied, never the text.
