ToolZen ToolZen
Text converter client

Case Converter

Convert text between camelCase, snake_case, PascalCase, kebab-case, UPPER_SNAKE, and dot.case formats in one click.

Advertisement (Top Banner)
lowercase all lowercase
UPPERCASE ALL UPPERCASE
Title Case Title Case
Sentence case First letter capitalized
camelCase For JavaScript variables
PascalCase For classes and components
snake_case For Python, DB, constants
kebab-case For URLs and CSS
CONST_CASE For constants
dot.case For config files
Advertisement (Bottom)

Cambiare il maiuscolo e minuscolo di un testo sembra l'operazione più banale che un computer esegua. Non lo è, e i modi in cui va storta hanno rotto software vero. Questo strumento converte tra dieci convenzioni in una volta — ma alcune di quelle conversioni buttano via informazione per sempre, e vale la pena sapere quali.

Il maiuscolo è una porta a senso unico

Quasi tutti presumono che la conversione sia reversibile. Non lo è. La ß tedesca non ha una forma maiuscola propria, quindi il maiuscolo la trasforma in due lettere: straße diventa STRASSE. Un carattere ne è diventato due.

Ora torna indietro. STRASSE in minuscolo è strasse — con ss, non ß. La lettera originale è sparita e niente può recuperarla, perché quando arrivi al minuscolo non c'è più traccia del fatto che quelle due S fossero una ß. Far fare a una parola tedesca il giro attraverso il maiuscolo ne cambia l'ortografia in silenzio.

La legatura fi fa la stessa cosa, diventando FI. È per questo che una colonna di database che conserva una copia maiuscola di un nome per le ricerche perde informazione senza dirlo, e per questo confrontare testi mettendo in maiuscolo entrambi i lati è un'idea sottilmente peggiore di quanto sembri.

La I turca, che ha messo fuori uso sistemi in produzione

Il turco ha due lettere I: una col punto e una senza, e sono lettere diverse con significati diversi. La i col punto in maiuscolo è İ. La I senza punto in minuscolo è ı.

Questo si scontra con un'abitudine che ogni sviluppatore ha. In JavaScript, "title".toUpperCase() dà TITLE. Ma "title".toLocaleUpperCase("tr") dà TİTLE — con il punto sulla I. Se un utente ha il locale turco e il tuo codice mette in maiuscolo una stringa per confrontarla con una costante, il confronto fallisce, e fallisce solo per gli utenti turchi. Vale anche all'inverso: "I".toLocaleLowerCase("tr") è ı, non i.

Ha buttato giù software vero, ripetutamente. La regola che lo evita è che la conversione per il confronto dev'essere indipendente dal locale, mentre quella per la visualizzazione deve seguire il locale dell'utente. Sono operazioni diverse che per caso condividono un nome. Questo strumento converte per la visualizzazione e non pretende di essere una funzione di confronto.

Gli acronimi sopravvivono in una direzione e non nell'altra

Spezzare un identificatore camelCase in parole è più delicato di quanto sembri, perché una sequenza di maiuscole potrebbe essere un acronimo. Uno split ingenuo a ogni maiuscola trasforma parseHTMLDocument in parse_h_t_m_l_document, che è una sciocchezza.

Questo strumento lo gestisce: parseHTMLDocument diventa parse_html_document, XMLHttpRequest diventa xml_http_request, getUserID diventa get_user_id. Cerca il confine dove una sequenza di maiuscole incontra una maiuscola seguita da minuscola, che è dove l'acronimo finisce e comincia la parola dopo.

Il viaggio di ritorno non può funzionare, e vale la pena capirlo invece di segnalarlo come bug. Converti parse_html_document di nuovo in camelCase e ottieni parseHtmlDocument, non parseHTMLDocument. La forma snake_case non ha mai registrato che html fosse un acronimo: quell'informazione è stata distrutta all'andata, e nessuna astuzia al ritorno può inventarla. Se stai convertendo identificatori in un codebase, converti una volta e rileggi, invece di fare avanti e indietro e fidarti.

Il Title Case non è un'operazione definita

Chiedi a due manuali di stile di mettere in title case la stessa frase e otterrai due risposte. Lo stile AP mette la maiuscola alle parole di quattro lettere o più. Chicago la mette a tutto tranne articoli, congiunzioni coordinanti e preposizioni brevi — a meno che non siano la prima o l'ultima parola. Nessuno dei due dice "maiuscola a ogni parola".

Ed è quello che fa questo strumento, perché è l'unica regola che funziona senza conoscere il tuo manuale di stile, la tua lingua, o quali parole siano nomi propri. È un default ragionevole e non è vero title case: ottieni "Il Signore Degli Anelli", e Chicago ti direbbe che è "Il Signore degli Anelli". Per i titoli che contano, usa l'output come punto di partenza e sistema le parole piccole a mano.

Domande frequenti

Il mio testo viene inviato a un server?

No. Questo strumento è marcato "client": ogni conversione gira nella scheda del tuo browser e non viene trasmesso niente.

Quale convenzione uso e per cosa?

Segui il linguaggio, non le tue preferenze: ogni ecosistema ha una convenzione e combatterla fa sembrare straniero il tuo codice. camelCase per variabili JavaScript e Java, PascalCase per classi e componenti, snake_case per Python e colonne di database, kebab-case per URL e CSS, CONSTANT_CASE per costanti e variabili d'ambiente. L'unico posto dove pensare invece di seguire sono gli URL, dove kebab-case non è solo convenzione: gli underscore sono più difficili da vedere sotto la sottolineatura di un link.

Perché la mia parola tedesca ha cambiato ortografia?

Hai messo in maiuscolo una ß. È diventata SS, e il minuscolo ha riportato ss invece di ß, perché l'informazione è andata persa al primo passaggio. Non è questo strumento a essere sciatto: è ciò che Unicode prescrive, e ogni implementazione corretta fa lo stesso. Se ti serve l'originale, conserva l'originale; non ricostruirlo da una copia maiuscola.

Il maiuscolo è sicuro per confrontare due stringhe?

Non in modo affidabile. Oltre al problema turco qui sopra, ci sono caratteri le cui forme maiuscola e minuscola non fanno il giro completo, quindi due stringhe possono diventare uguali in maiuscolo pur essendo genuinamente diverse, e viceversa. Per il confronto usa un case fold indipendente dal locale: in JavaScript, localeCompare con sensitivity impostata a "base" o "accent" è di solito ciò che vuoi davvero.

Perché il sentence case sbaglia sui nomi?

Perché il sentence case mette in minuscolo tutto dopo il primo carattere, e non ha modo di sapere che Parigi è un posto. Da "GIOVANNI È ANDATO A PARIGI" ottieni "Giovanni è andato a parigi". Recuperare i nomi propri richiede un dizionario e, nei casi ambigui, un umano. Se il testo ti è arrivato urlato tutto maiuscolo, il sentence case ti porta quasi a destinazione e i nomi vogliono un passaggio a occhio.