Case Converter

Convert text to UPPERCASE, lowercase, camelCase, PascalCase, snake_case, kebab-case or Title Case.

Case Converter: Uppercase, Lowercase, Title Case, camelCase and snake_case

Type or paste text into the case converter above and it is shown in seven styles at once: UPPERCASE, lowercase, Title Case, camelCase, PascalCase, snake_case and kebab-case. Click any result to copy it. Use it to fix text typed with Caps Lock on, to turn a heading into title case, or to rename a variable, a CSS class or a database column in the style your code expects.

Uppercase to lowercase, and back

UPPERCASE and lowercase convert every letter and leave everything else untouched: spaces, punctuation, numbers and line breaks stay where they are. Accented letters convert correctly too, so café becomes CAFÉ and ÑANDÚ becomes ñandú.

The most common use is fixing text typed with Caps Lock on, or normalising values before comparing them, such as email addresses, which are usually matched in lowercase. Text pasted from a word processor or an AI assistant often also carries curly quotes, double spaces and invisible characters; a text cleaner removes those before you convert the case.

The identifier styles

input:        user account ID
Title Case    User Account Id
camelCase     userAccountId
PascalCase    UserAccountId
snake_case    user_account_id
kebab-case    user-account-id

For these styles, the converter first splits the input into words. It splits on spaces, underscores, hyphens and other punctuation, and also at case changes inside existing identifiers, so userAccountId, user_account_id and User-Account-ID all produce the same words. Acronyms are recognised as words: parseHTTPResponse becomes parse_http_response, and XMLHttpRequest becomes xml-http-request.

Punctuation that is not a separator is dropped in these styles, because identifiers cannot contain it. Accented letters and digits are kept.

Which style goes where

camelCase     JavaScript/Java variables and functions, JSON fields in many APIs
PascalCase    class and type names in most languages; C# methods and properties
snake_case    Python, Ruby and Rust variables; database tables and columns
kebab-case    CSS classes, URL slugs, file names, command-line flags
SCREAMING_SNAKE_CASE   constants and environment variables (use UPPERCASE on snake_case)
Title Case    headings, titles, button labels

A single field often needs several spellings: created_at in a Python model, createdAt in the JavaScript client, CREATED_AT as a constant. The converter shows every style side by side, which is handy for one-off renames, documentation and checking what an automatic conversion will produce. Renaming across a whole API belongs in the serialiser, not in copy and paste.

Title case or sentence case?

The Title Case output capitalises the first letter of every word. That is the right style for many UI labels and file names. Editorial style guides are more selective, and they disagree with each other:

every word          The Lord Of The Rings Returns To The Screen
APA                 The Lord of the Rings Returns to the Screen
sentence case       The lord of the rings returns to the screen

APA capitalises every word of four letters or more, plus nouns, verbs, adjectives, adverbs and pronouns of any length, and keeps short articles, conjunctions and prepositions in lower case unless they start the title. Chicago lowercases prepositions whatever their length, so the two produce different results for words such as between and about, and AP has its own rules again. If you follow one of them, adjust the short words by hand after converting.

Many technical style guides avoid the question altogether. The Google developer documentation style guide and the Microsoft Writing Style Guide both use sentence case for headings: capitalise the first word and proper nouns only. Sentence case is easier to apply consistently and reads more naturally in interfaces, and it keeps names such as GitHub or iPhone intact. To get it from the converter, take the lowercase output and capitalise the first word and any names yourself.

Converting case in code, and the Unicode pitfalls

'Hello World'.toUpperCase();          // 'HELLO WORLD'   JavaScript
'Hello World'.toLowerCase();          // 'hello world'

'Hello World'.upper()                 # Python
'hello world'.title()                 # 'Hello World'

SELECT UPPER(name), LOWER(email) FROM users;   -- SQL

Case mapping is not always one letter to one letter, and in some languages it depends on the locale. In Turkish, lowercase I is the dotless ı, so toLowerCase() and toLocaleLowerCase('tr') give different results. The results below are what JavaScript and Python actually return:

'Straße'.toUpperCase()              // 'STRASSE'  one letter becomes two
'STRASSE'.toLowerCase()             // 'strasse'  the ß does not come back
'İ'.toLowerCase().length            // 2          i + combining dot above (U+0307)
'I'.toLocaleLowerCase('tr')         // 'ı'        dotless i
'i'.toLocaleUpperCase('tr')         // 'İ'        dotted capital I
'ΟΔΥΣΣΕΥΣ'.toLowerCase()            // 'οδυσσευς' final sigma ς at the end

'Straße'.casefold()                 # 'strasse'   Python, for comparisons

Two practical consequences follow. First, converting to upper case and back does not always return the original text, so keep the original when you only need a different display. Second, the length of a string can change, which breaks code that assumes an uppercase copy has the same length, for example when it highlights a match found in an uppercased copy at the same position in the original. For case-insensitive comparison, use Python's str.casefold(), or in JavaScript localeCompare with { sensitivity: 'base' } or Intl.Collator, rather than comparing two lowercased strings. For identifiers and emails, use the plain, locale-independent functions.

Changing case in Excel and Google Sheets

Spreadsheets have the same three basic conversions as built-in functions, with identical names in Excel and Google Sheets:

=UPPER(A2)                                  HELLO WORLD
=LOWER(A2)                                  hello world
=PROPER(A2)                                 Hello World
=UPPER(LEFT(A2,1)) & LOWER(MID(A2,2,LEN(A2)))   Hello world  (sentence case)

PROPER capitalises every letter that follows a character other than a letter, so an apostrophe or digit starts a new word: it's becomes It'S, and 2-way street becomes 2-Way Street. Python's str.title() has the same behaviour. The formulas also return new values in a separate column; to replace the original text, copy the results and paste them back as values. For a one-off list, pasting the column into the converter and copying the result back is often quicker.

Instant, as you type

All seven results update on every keystroke, so you can paste a list of column names and see each style at once. Nothing leaves the browser tab, which is worth knowing when the names come from an internal schema.

Frequently asked questions

How do I convert uppercase to lowercase?

Paste the text into the converter and copy the lowercase result. Every letter, including accented ones, is converted, and spacing and punctuation are kept.

How do I convert text to uppercase?

Paste the text and copy the UPPERCASE result. It works for any length of text and keeps line breaks and punctuation.

What is the difference between camelCase and PascalCase?

Both join words with capital letters. camelCase starts with a lowercase letter (userAccountId); PascalCase starts with a capital (UserAccountId) and is typically used for class and type names.

What is snake_case?

Lowercase words joined by underscores, such as user_account_id. It is the convention for variables in Python and Ruby and for most database columns.

What is kebab-case used for?

Lowercase words joined by hyphens, such as user-account-id. It is used for CSS classes, URL slugs and file names, but not for variables, because the hyphen is the minus operator in most languages.

Does the converter handle accented letters?

Yes. Uppercase and lowercase convert accented letters, and the identifier styles keep them: café menú becomes caféMenú in camelCase and café_menú in snake_case.