There is no single title case
“Title Case” sounds like one thing and is at least three, which is why this tool shows them together rather than picking one and calling it the answer.
Take the lord of the rings:
- Naive — The Lord Of The Rings. What a word-boundary regex produces: every word capitalised. Not a published style, but overwhelmingly the most common in software.
- Chicago — The Lord of the Rings. Articles, coordinating conjunctions and prepositions are lower-cased regardless of length, except as the first or last word.
- AP — agrees here, and diverges elsewhere.
Chicago and AP part company on longer prepositions. a journey through the woods is A Journey through the Woods in Chicago, which lower-cases prepositions at any length, and A Journey Through the Woods in AP, which capitalises anything of four letters or more.
Both rules keep the first and last word capitalised whatever they are, which is why Of Mice and Men keeps its capital O and What Are You Waiting For keeps its capital F.
If you are writing to a house style, pick the one that style names. If you are writing software, know that the naive version is what most libraries do and that it is not what an editor would accept.
The bug that breaks Turkish logins
Case conversion is not a property of a string. It is a property of a string and a locale, and the difference has broken real production systems.
Turkish treats the dotless ı as a separate letter from i, with its own capital I, while dotted i capitalises to İ. So lower-casing ADMIN gives admin under invariant rules and admın under Turkish ones.
That is enough to break a login. A case-insensitive comparison written as input.toLowerCase() === "admin"runs under the user’s locale in many environments, so a Turkish user typing their username exactly right produces admın, which does not match — and the failure is invisible to everyone testing in English.
The fix in code is to normalise with an explicitly invariant function rather than the locale-sensitive default: toLowerCase('en-US')or the platform’s invariant equivalent, and never the locale-default one for identifiers, keys or comparisons.
This tool warns when your text is actually affected — when it contains an I — rather than showing the warning on everything, because a warning that appears on every input is one nobody reads.
Cases that are really naming schemes
camelCase, PascalCase, snake_case, kebab-case and CONSTANT_CASE are not typographic styles at all. They are conventions for writing multi-word identifiers where spaces are not allowed, and each belongs to particular contexts.
camelCase for variables and functions in JavaScript, Java and Swift. PascalCase for classes and types in most of those same languages, and for functions in Go and C#. snake_case for variables and functions in Python, Ruby and Rust, and for database column names almost everywhere.
kebab-case cannot be an identifier in most languages, because the hyphen is a minus sign — which is exactly why it is safe in URLs, CSS class names and file names, where it will never be parsed as arithmetic. CONSTANT_CASE is the near-universal convention for environment variables and compile-time constants.
The conversion between them is lossy in one direction: splitting userProfileImageURL back into words has to guess where the acronym ends, and reasonable implementations disagree about whether the result is user_profile_image_url or user_profile_image_u_r_l. This one splits on the lower-to-upper transition, which handles the common case and does not pretend to handle every one.
Sentence case cannot know your nouns
Sentence case capitalises the first letter of each sentence and lower-cases the rest. That last part is where it goes wrong, and no algorithm can fix it.
APPLE RELEASED A NEW PHONE IN PARIS becomes Apple released a new phone in paris — the sentence start is right and Paris has lost its capital, because nothing in the string says it is a place rather than a word. Names, brands, months, languages and nationalities all fail the same way.
The same limit applies to every title case here from the other direction: they capitalise words that should stay lower-case in some contexts, and they cannot tell a proper noun from an ordinary one either.
So treat any automatic case conversion as a first pass. It gets the mechanical part right — sentence starts, short-word rules, separators — and leaves the judgement where it belongs.
Doing it in a spreadsheet
=UPPER(A1), =LOWER(A1) and =PROPER(A1) cover the basics. PROPER is the naive title case — it capitalises every word, including the short ones, so it produces The Lord Of The Rings rather than any published style.
It also has a quirk worth knowing: PROPER capitalises after any non-letter, so o'brien becomes O'Brien — usually right — but can't becomes Can'T, which is not. Names with apostrophes and contractions cannot both be handled by the same rule.
For sentence case there is no built-in function. The usual construction is =UPPER(LEFT(A1,1))&LOWER(MID(A1,2,LEN(A1))), which handles a single sentence and lower-cases every proper noun in it — the same limitation as above, with no warning.
For identifiers, =LOWER(SUBSTITUTE(TRIM(A1)," ","_")) gives snake_case and the same with a hyphen gives kebab-case. Wrap the input in TRIM — a trailing space becomes a trailing separator otherwise, and those are invisible in the cell and fatal in a URL.
Sources and methodology
Nothing here is fetched and there is no data feed, and there is no arithmetic either — this is a string transformation. What the sources settle is that the transformation is not neutral: Unicode defines case mapping as locale-sensitive and names the Turkish case explicitly, and Chicago and AP publish genuinely different capitalisation rules that this page does not attempt to reconcile.