Text Tools

Text Formatter

Convert text between different cases instantly. Everything runs in your browser — nothing is sent anywhere.

Input
0 chars0 words
Output Sentence case

What is a text case converter?

A text case converter takes text you already have and re-writes it in a different capitalisation convention. A headline that arrived in ALL CAPS goes back to being a normal sentence. A spreadsheet header becomes a database column name, a class name becomes a URL slug. The rules behind each convention are mechanical, which is exactly what makes applying them by hand tedious: every language, database, and CMS wants a different one, and retyping a name in a new shape is the kind of small task that eats an afternoon once you have forty of them to do.

This tool offers ten conversions: Sentence case, Title Case, UPPER CASE, lower case, camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, and aLtErNaTiNg. Pick one, then type or paste into the left panel. The converted text is there the moment you stop typing — there is no convert button to press. The input panel carries a live character and word count, Clear empties both panels, and Copy puts the output on your clipboard. Hover a case button and it shows an example of what that case produces, so you can check the convention before committing to it.

When to use it

The most common reason to be here is a naming-convention mismatch between two systems. Your Postgres columns are snake_case, your TypeScript model wants camelCase, and you are hand-writing the mapping for shipping_address_line_2, billing_contact_email, and eighteen others. Or the reverse: an API hands you createdAt and updatedAt, and the Python client that consumes them expects created_at. Paste each name in, take the converted form, move on. CONSTANT_CASE covers the same ground when a feature-flag name or a config key has to become an environment variable. Type "database pool size", get DATABASE_POOL_SIZE back, and never count an underscore.

Text from another system in the wrong case is the other big one. CSV exports come with headers like "Order Total (USD)", "Ship-To Country", and "Date Received", none of them legal column names; snake_case gives you one a warehouse table will accept. Spec headings become kebab-case slugs for URLs, anchor links, CSS class names, branch names, and static file names, all lowercase-and-hyphens. Prose runs the other way: a CMS headline in full caps, a product name typed in caps lock, a paragraph that came back SHOUTING from a PDF extraction. Sentence case makes any of them readable; Title Case makes a heading look like a heading. Both are text-level conversions, so punctuation, spacing, and line breaks survive untouched and a whole block converts at once rather than line by line.

How this tool works

The ten options split into two families. UPPER CASE, lower case, Sentence case, Title Case, and aLtErNaTiNg leave every character, space, punctuation mark, and line break where it is, changing only capitalisation. Sentence case lowercases everything first, then capitalises the first letter and any letter following a period, exclamation mark, or question mark plus a space. Title Case capitalises the first letter of every word. aLtErNaTiNg flips case by character position across the raw text, spaces included, so word starts land differently depending on position. The other five (camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE) must find the words first. The splitter does three things: inserts a break wherever a lowercase letter is immediately followed by an uppercase one, turning createdAt into created + At; treats runs of underscores and hyphens as separators; and deletes anything left that is not a letter, digit, or whitespace. What remains is split on whitespace and re-joined in the target convention.

That heuristic is worth understanding because of where it breaks. Acronyms followed by a word are the classic failure: getUserID splits correctly into get_user_id, but parseHTMLDocument comes out as parse_htmldocument, because the only boundary rule is lower-then-upper and HTMLDocument never triggers it. Digits do not count as lowercase letters either, so address2Line becomes address2line. Punctuation is deleted rather than treated as a separator, so first.name collapses to firstname and "Date/Time" becomes datetime. Insert a space or a hyphen yourself if you want those split. The sharpest edge comes last: the filter keeps only ASCII letters and digits, so accented and non-Latin characters are removed outright in these five modes. "café" converts to caf, naïve_flag becomes nave_flag, and Cyrillic or CJK text disappears entirely. The five text-level modes handle unicode correctly, so use those for anything that is not an identifier. One more thing to know about the splitter: newlines are just whitespace to it, so pasting a column list of twenty names into snake_case returns one long joined identifier rather than twenty lines. Convert identifiers one at a time.

All of this runs in your browser. The conversion is JavaScript running in the tab you already have open, so nothing is uploaded and no server ever sees it. That guarantee earns its keep when the strings you are renaming are internal schema names, customer-facing copy under embargo, or a config key from a system nobody outside your team has heard of.

Examples

  • Spreadsheet header to a database column

    Input
    Order Total (USD)
    Output
    order_total_usd

    Spaces become word boundaries. The parentheses are dropped rather than turned into separators, and what is left gets lowercased and joined with underscores. The result is a legal column name in Postgres, MySQL, or BigQuery, none of which will accept the original.

  • Legacy column to an ORM field name

    Input
    shipping_address_line_2
    Output
    shippingAddressLine2

    Underscores are read as word breaks, the first word stays lowercase, and the rest are capitalised, including the trailing digit's segment, which attaches as Line2. Convert one column per pass: newlines count as whitespace here, so pasting the whole column list at once returns a single joined identifier.

  • A headline that arrived in caps from the CMS

    Input
    NASA CONFIRMS LAUNCH WINDOW. DETAILS TO FOLLOW.
    Output
    Nasa confirms launch window. Details to follow.

    Both sentences get capitalised, because the rule fires on a period followed by a space. Note what it costs you. Sentence case lowercases everything first, so a real acronym like NASA comes back as Nasa. Proper nouns and initialisms need a manual fix afterwards. There is no dictionary behind this.

  • Doc heading to a URL slug

    Input
    Migrating To Serverless: What We Learned
    Output
    migrating-to-serverless-what-we-learned

    The colon is deleted while the space beside it still separates the words, so you get a single clean hyphen rather than a doubled one. The same output works as a filename, a git branch name, an anchor id, or a CSS class.

Frequently asked questions

  • What is the difference between camelCase and PascalCase?

    They are identical except for the very first letter: camelCase leaves it lowercase (getUserName), PascalCase capitalises it (GetUserName). Both read underscores as word boundaries, so a database column like user_account_id comes back as userAccountId, which is the conversion that comes up most often when a snake_case column has to become a field on a JavaScript or TypeScript model. The convention in most C-family and JavaScript codebases is camelCase for variables, function names, and object properties, and PascalCase for things you can instantiate or reference as a type: classes, interfaces, enums, and React components. Pick the wrong one and nothing breaks at runtime, but a linter will usually tell you about it.

  • What is kebab-case used for?

    Kebab-case is lowercase words joined by hyphens, and it is the convention for anything that lives in a URL or a filesystem: URL slugs, HTML id and class attributes, CSS custom property names, npm package names, git branch names, and static file names. It is preferred over snake_case in those places partly because search engines have long treated hyphens as word separators and underscores as joiners.

  • Why does Title Case capitalize words like "of" and "the"?

    Because this Title Case capitalises the first letter of every word, with no list of exceptions. AP and Chicago style hold short prepositions, articles, and conjunctions lowercase in the middle of a heading, and that stylebook logic is absent here. It also fires after an apostrophe, so "don't" comes back as "Don'T". Treat the output as a starting point for a headline and fix the small words by hand. For body text, Sentence case is usually the one you want.

  • Can I convert a whole list of names at once?

    For UPPER CASE, lower case, Sentence case, Title Case, and aLtErNaTiNg, yes. Those five preserve your line breaks, so a whole block converts line by line. For camelCase, PascalCase, snake_case, kebab-case, and CONSTANT_CASE, no: those modes treat a newline as an ordinary word separator, so a twenty-line column list comes back as one long identifier. Convert identifiers one at a time.

  • Can I get a custom version of this for my team?

    Yes. A converter in a browser tab is the right shape for a handful of names. It is the wrong shape once you are renaming three hundred columns in a migration, enforcing a naming convention in code review, or mapping field names between two services on every deploy. That transition is what Zinc Online Solutions gets called in for. Tell us which convention has to become which, and where the names come from, and we will scope the version that runs without a human pasting into a box.