Case converter

Nine cases, including the programming ones, and an honest account of the two that are judgement rather than arithmetic. Nothing you type here leaves your browser. It is worked out on your own device, so there is nothing to send and nothing to log — which matters more for text than for most things, because people paste in work they are not supposed to paste anywhere.

Changing case can change the LENGTH of the text

This surprises people and it is not a bug. The German ß has no capital — it never had one when the rule was written — so its uppercase is two letters:

straßesix characters
STRASSEseven

The same happens to ligatures: ff is one character and becomes FF, which is two. Measured in two languages that share no code — JavaScript's toUpperCase and Python's str.upper both do it, so it is the rule rather than a quirk of one of them.

And it does not come back

Take straße up to STRASSE and back down and you get strasse — a different word. There is no information in STRASSE saying which of its two S's used to be an eszett, and nothing can put it back. So if the original matters, keep a copy before you convert it.

Two of these are judgement, not arithmetic

Title case capitalises every word. Which small words a publisher leaves lowercase — a, the, of, and — is a house style, and there are several, so this does not pretend to know yours.

Sentence case capitalises after a full stop, a question mark or an exclamation mark. It cannot tell those from the full stop in “Dr.” or “e.g.”, and nothing can without understanding the sentence. Check its work.

The programming cases split words properly

camelCase, PascalCase, snake_case and kebab-case all need to know where the words are, and that includes the boundary inside a run of capitals. parseHTMLFile comes apart as parse / HTML / File rather than being treated as one word, so it becomes parse_html_file and not parsehtmlfile.

Where to go next