Case Converter — UPPERCASE, camelCase, snake_case & more
Paste any text to see all ten common conversions at once — UPPERCASE, lowercase, Title Case, Sentence case, camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE and dot.case. Unicode-aware, idempotent, runs entirely in your browser.
How it works
The converter applies the same three-pass word-splitting heuristic that the change-case library uses, then re-emits the words under the chosen convention. Every step is a pure function — no network call, no state, no dependency beyond the JavaScript engine's built-in Unicode case mappings.
- Pass 1 — acronym boundary. A regex matches a run of uppercase letters followed by an uppercase + lowercase pair, and inserts a space between them. So
XMLParserbecomesXML Parserand the all-caps acronym is preserved as one word. - Pass 2 — lower / digit to upper. A second regex matches a lowercase letter or digit followed by an uppercase letter, and inserts a space.
helloWorldbecomeshello Worldand100USDbecomes100 USD. - Pass 3 — split on non-word. The gapped string is split on any run of characters that is neither a Unicode letter
\p{L}nor a digit\p{N}. Spaces, hyphens, underscores, dots, slashes and punctuation all become separators, and the resulting word list is what every naming convention is built on. - Emit. The word list is re-cased per convention:
snake_caselowercases each word and joins with_,kebab-casejoins with-,CONSTANT_CASEuppercases each word,camelCasecapitalises every word except the first.
UPPERCASE and lowercase are direct calls to JavaScript's built-in String.prototype.toUpperCase and toLowerCase, which follow Unicode TR-21 case-mapping rules. That means accented Latin (Café → CAFÉ), Greek (μ → Μ), Cyrillic (ы → Ы) and full-width Latin all round-trip correctly. Non-cased scripts (Sinhala, Tamil, CJK ideographs) pass through unchanged.
Sentence case lowercases the whole input, then re-capitalises the first letter after the start, after any .!? followed by whitespace, and after a newline or em-dash boundary. Title Case is the every-word variant by default; the methodology tile shows what AP-style (with short-word skip list) would produce instead. Every transform satisfies the idempotence invariant f(f(x)) === f(x) on the eight canonical cases — the "verified" badge in the calculator header is computed live from that check.
Worked examples
Frequently asked questions
Sources & references
- ECMA-262 — String.prototype.toUpperCase / toLowerCase (TC39 spec)
- Unicode Technical Report #21 — Case Mappings
- MDN Web Docs — Camel case glossary
- MDN Web Docs — Snake case glossary
- MDN Web Docs — Kebab case glossary
- change-case (MIT) — reference word-splitting implementation
- AP Stylebook — Composition titles (capitalisation rules)
The transforms on this page were last cross-checked on 2026-05-11. The page is reviewed whenever a naming convention shifts in a major language ecosystem or a relevant TC39 proposal lands. If you spot an edge case that disagrees with another converter, please email me below.
Related tools
Comments & feedback
Spotted a bug or want an improvement? Tell us — our team reviews every comment, and good ideas get built. Comments are public and anonymous.
Spotted a conversion mismatch, an edge case, or want to suggest a new case?
Email me at [email protected] — most fixes ship within 24 hours.