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
Generate SEO-friendly URL slugs from text. Convert titles to clean URLs with diacritics removal. Free online slug generator for websites
Clean up text by removing duplicate lines, trimming whitespace, removing empty lines, normalizing spaces. Multiple operations in one pass. Free online text sanitizer
Count words, characters, sentences, paragraphs in text. Calculate reading time, keyword density. Free online word count tool for writers
Sort, deduplicate, reverse, shuffle, filter, and number lists. Multiple list operations in one place. Free online list manipulation tool
Find and remove hidden Unicode characters in text. Detect zero-width spaces, RTL marks, homoglyphs. Debug copy-paste issues
Generate Lorem Ipsum placeholder text for web design and mockups. Create paragraphs, sentences, words. Free dummy text generator online
Last updated · E-Utils editorial team