Incolla un testo qualsiasi e ottienilo in tutte le convenzioni di scrittura più comuni, oltre che come slug URL.
Digita o incolla del testo per convertirlo.
Quando usare ciascuna convenzione
Le convenzioni di denominazione servono soprattutto ad allinearsi al linguaggio che stai usando. JavaScript e Java usano camelCase per le variabili e PascalCase per classi e componenti. Python e Rust usano snake_case per variabili e funzioni. Classi CSS, nomi di file e URL usano kebab-case. CONSTANT_CASE indica valori che non cambiano mai.
Lo slug URL va oltre il kebab-case: rimuove anche accenti e punteggiatura, così «Zażółć gęślą jaźń!» diventa un segmento di indirizzo pulito e sicuro. È quindi la scelta giusta per URL di pagine, nomi di file e ancore.
Mettere straße in maiuscolo allunga la stringa, e riportarla in minuscolo dà un'altra parola
Cambiare il caso sembra uno scambio carattere per carattere. Non lo è. La ß tedesca in maiuscolo diventa SS, quindi una parola di sei caratteri ne diventa sette — e riportare il risultato in minuscolo dà strasse, che non è la parola di partenza. La conversione di caso può cambiare la lunghezza, non è reversibile e dipende dalla lingua di chi legge.
Come funziona
- Converte fra maiuscolo, minuscolo, caso titolo, caso frase e stili camel, snake e kebab.
- Usa una conversione consapevole delle impostazioni locali, perché il risultato corretto varia con la lingua.
- Gestisce i caratteri il cui cambio di caso altera la lunghezza della stringa.
maiuscolo e minuscolo NON sono operazioni inverse straße → STRASSE → strasse (6 → 7 → 7 caratteri) le impostazioni locali contano: "I".toLowerCase() → "i" locale turca → "ı" (U+0131, senza punto)
Esempio pratico
Due casi in cui la conversione ingenua è sbagliata.
- straße ha 6 caratteri
- in maiuscolo → STRASSE, 7 caratteri
- di nuovo in minuscolo → strasse, sempre 7 e non è più la parola originale
- "I" in minuscolo in inglese → "i"
- "I" in minuscolo in turco → "ı", un carattere del tutto diverso
La lunghezza è cambiata, il viaggio di andata e ritorno ha perso informazione, e la risposta corretta per uno degli input dipende da chi lo legge. Qualsiasi codice che presuma la conversione di caso come corrispondenza biunivoca reversibile sbaglia su entrambi i fronti.
Come leggere il risultato
- Non ripiegare mai il caso per confrontare usando solo toUpperCase o toLowerCase. Unicode definisce un'operazione di case folding esattamente per questo; usare la conversione pensata per la visualizzazione nel confronto di identificatori produce discordanze che compaiono solo in certe lingue.
- La i turca con e senza punto è il bug di localizzazione classico. Portare una I ASCII in minuscolo in locale turca dà ı, quindi un confronto senza distinzione di caso su nomi di file, comandi o nomi utente fallisce in silenzio per gli utenti turchi e per nessun altro.
- Il caso titolo non è un'operazione Unicode ma una convenzione editoriale, e varia fra manuali di stile e fra lingue. Il tedesco scrive con la maiuscola tutti i sostantivi; i manuali inglesi sono in disaccordo fra loro sulle preposizioni brevi. Nessuna impostazione di libreria lo rende corretto ovunque.
- Gli stili di denominazione in programmazione portano insidie proprie. Convertire in camelCase e tornare indietro passando per snake_case è lossy non appena entrano in gioco le sigle: parseHTTPResponse e parseHttpResponse producono la stessa forma snake e al ritorno non sono più distinguibili.
Domande frequenti
- Perché il mio testo si è allungato dopo il passaggio in maiuscolo?
- Perché alcuni caratteri si espandono. La ß tedesca diventa SS, e diverse legature si scompongono allo stesso modo. Qualsiasi impaginazione, colonna di database o regola di validazione che presuma che la conversione preservi la lunghezza prima o poi si romperà su dati reali.
- Come confronto due stringhe ignorando il caso?
- Usa il case folding anziché il passaggio a maiuscolo o minuscolo, e indica la locale quando esiste un contesto linguistico. Il passaggio ingenuo a minuscolo è corretto per l'ASCII e dà risposte errate in turco, tedesco e diverse altre lingue.