Text Case Converter

Text Case Converter

Convert text to UPPERCASE, lowercase, Title Case, camelCase, snake_case, kebab-case. Free online text case changer and transformer

Renaming a list of class names from kebab-case to camelCase by hand is the kind of task that takes 30 seconds and produces three typos. This converter handles the common transformations (UPPER, lower, Title, camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, dot.case) and preserves word boundaries when input is mixed. Paste a column, get a converted column.

How the word boundaries are detected

The conversion is unambiguous when input has explicit separators (hyphens, underscores, spaces, dots). It gets harder when input is already in a programmer case. For "XMLHttpRequest", a naive splitter on uppercase letters produces XML-Http-Request — correct. For "iOS", the same logic produces i-O-S — wrong. The converter handles acronym runs (sequences of consecutive uppercase letters) by treating them as one word until a lowercase letter is hit.

  • Separator-driven: hello-world, hello_world, hello world, hello.world → "hello" + "world"
  • Camel-driven: helloWorld, HelloWorld → split before each uppercase letter following a lowercase one
  • Acronym-driven: XMLParser, parseHTTPResponse → keep consecutive uppercase letters together until a lowercase appears
  • Digit-driven: parse2Json, version1Beta → split before and after digit runs

Working example

Input

XMLHttpRequest
parseHTTPResponse
user-profile-id
VERSION_1_BETA

Output

camelCase:    xmlHttpRequest, parseHttpResponse, userProfileId, version1Beta
snake_case:   xml_http_request, parse_http_response, user_profile_id, version_1_beta
kebab-case:   xml-http-request, parse-http-response, user-profile-id, version-1-beta
PascalCase:   XmlHttpRequest, ParseHttpResponse, UserProfileId, Version1Beta
CONSTANT:     XML_HTTP_REQUEST, PARSE_HTTP_RESPONSE, USER_PROFILE_ID, VERSION_1_BETA

Note that "XML" loses its all-caps form in camelCase output (becomes "xml"). This is intentional and follows the Google JavaScript style guide convention; some teams prefer XMLHttpRequest to be left untouched — adjust per project.

When to reach for this tool

  • You are renaming a struct from a snake_case Rust crate to camelCase TypeScript and have 30 fields to do at once.
  • A CSV column header is in Title Case and your database wants snake_case — paste the header row, get the SQL-friendly version.
  • You are normalizing a tag list pulled from a CMS where editors used "Web Dev", "web-dev", "webDev", and "WebDev" interchangeably.
  • You want to verify a refactor: does this regex produce the same output as your IDE's "convert to camelCase" command? Compare on a few edge cases.

What this tool will not do

  • It will not understand semantic meaning. "iOS" will be converted as if "iOS" were a regular word — context (it is a product name) is not preserved.
  • It will not handle non-Latin scripts ideally. Title Case on Polish ("zażółć gęślą jaźń" → "Zażółć Gęślą Jaźń") works, but for languages with different capitalization rules (Turkish dotted/dotless i), use a locale-aware library.
  • It will not preserve embedded punctuation other than recognized separators. Email addresses, paths, and URLs will lose their dots, slashes, and @ signs — strip them before converting.

Frequently asked questions

What is the difference between Title Case and Sentence case?

Title Case capitalizes the first letter of every "important" word (often skipping articles and prepositions): "The Quick Brown Fox". Sentence case only capitalizes the first letter of the sentence: "The quick brown fox". Style guides disagree on which short words to skip in Title Case — AP, Chicago, and APA all differ.

Is camelCase the same as PascalCase?

No. camelCase starts with a lowercase letter (myVariable). PascalCase starts with uppercase (MyClass). The convention in most languages is camelCase for variables and functions, PascalCase for types and components.

How do I convert "URL_PARSER_V2" preserving the V2?

Depends on the target case. To camelCase it becomes urlParserV2 (V is kept as a word boundary), to snake_case → url_parser_v_2, to kebab-case → url-parser-v-2. If you want to keep V2 together, the converter splits on the digit by default; use the "treat numbers as part of preceding word" option if available, or post-process.

Why does my snake_case input come back as snakeCase instead of snake_case?

You selected camelCase as the output. The converter detected snake_case as the input format and removed the underscores. To keep input format, choose the same case in the output dropdown — but that is a no-op, so probably you wanted a different target.

Does this handle Unicode and accented characters?

Yes for case-changing (using JavaScript's built-in toUpperCase/toLowerCase, which is mostly correct for European languages). Edge cases like Turkish I/i or German ß require locale-specific handling and are not automatic.

Can I batch-convert multiple lines at once?

Yes — paste line-separated values and each line is converted independently. Useful for converting an entire column from a spreadsheet or a list of identifiers.

Related tools

Last updated · E-Utils editorial team