Skip to main content

Wklej dowolny tekst i otrzymaj go we wszystkich popularnych konwencjach zapisu oraz jako slug URL.

Wpisz lub wklej tekst, aby go przekonwertować.

Kiedy stosować którą konwencję

Konwencje nazewnicze sprowadzają się głównie do dopasowania się do języka, w którym piszesz. JavaScript i Java używają camelCase dla zmiennych i PascalCase dla klas i komponentów. Python i Rust stosują snake_case dla zmiennych i funkcji. Klasy CSS, nazwy plików i adresy URL korzystają z kebab-case. CONSTANT_CASE oznacza wartości, które się nie zmieniają.

Slug URL idzie dalej niż kebab-case: usuwa też znaki diakrytyczne i interpunkcję, więc „Zażółć gęślą jaźń!" zamienia się w czysty, bezpieczny fragment adresu. To właściwy wybór dla adresów stron, nazw plików i kotwic.

Zamiana straße na wielkie litery wydłuża ciąg, a powrót do małych daje inne słowo

Zmiana wielkości liter wygląda na podmianę znak za znak. Nie jest nią. Niemieckie ß zamienia się na SS, więc sześcioznakowe słowo staje się siedmioznakowe — a zamiana wyniku na małe litery daje strasse, czyli nie to słowo, od którego zacząłeś. Konwersja wielkości liter potrafi zmienić długość, nie jest odwracalna i zależy od języka czytelnika.

Jak to działa

  • Konwertuje między wielkimi, małymi, tytułowymi, zdaniowymi oraz stylami camel, snake i kebab.
  • Używa konwersji świadomej ustawień językowych, bo poprawny wynik różni się w zależności od języka.
  • Obsługuje znaki, których zmiana wielkości zmienia długość ciągu.
wielkie i małe litery NIE są operacjami odwrotnymi

straße → STRASSE → strasse     (6 → 7 → 7 znaków)

ustawienia językowe mają znaczenie:
  "I".toLowerCase()      → "i"
  język turecki           → "ı"  (U+0131, bez kropki)

Przykład z liczbami

Dwa przypadki, w których naiwna konwersja jest błędna.

  1. straße ma 6 znaków
  2. zamienione na wielkie → STRASSE, 7 znaków
  3. ponownie na małe → strasse, wciąż 7 i już nie jest to pierwotne słowo
  4. "I" na małe po angielsku → "i"
  5. "I" na małe po turecku → "ı", całkowicie inny znak

Długość się zmieniła, obieg w obie strony utracił informację, a poprawna odpowiedź dla jednego z wejść zależy od tego, kto ją czyta. Każdy kod zakładający, że konwersja wielkości liter jest odwracalnym odwzorowaniem jeden do jednego, myli się w obu tych punktach.

Jak czytać wynik

  • Nigdy nie ujednolicaj wielkości liter do porównań samym toUpperCase ani toLowerCase. Unicode definiuje osobną operację case folding dokładnie w tym celu; użycie konwersji przeznaczonej do wyświetlania przy porównywaniu identyfikatorów daje niezgodności widoczne tylko dla niektórych języków.
  • Tureckie i z kropką oraz bez kropki to klasyczny błąd językowy. Zamiana ASCII-owego I na małe w ustawieniach tureckich daje ı, więc porównanie nazw plików, poleceń albo nazw użytkowników bez uwzględniania wielkości liter po cichu zawodzi u użytkowników tureckich i u nikogo innego.
  • Zapis tytułowy to nie operacja Unicode, tylko konwencja redakcyjna, i różni się między przewodnikami stylu oraz między językami. Niemiecki zapisuje wielką literą wszystkie rzeczowniki; angielskie przewodniki stylu nie zgadzają się między sobą co do krótkich przyimków. Żadne ustawienie biblioteki nie uczyni tego poprawnym wszędzie.
  • Style zapisu w programowaniu niosą własne pułapki. Konwersja do camelCase i z powrotem przez snake_case jest stratna, gdy w grę wchodzą skrótowce — parseHTTPResponse i parseHttpResponse odwzorowują się na tę samą postać snake i w drodze powrotnej nie da się ich rozróżnić.

Częste pytania

Dlaczego mój tekst wydłużył się po zamianie na wielkie litery?
Bo część znaków się rozszerza. Niemieckie ß staje się SS, a kilka ligatur rozkłada się w ten sam sposób. Każdy układ graficzny, kolumna bazy danych albo reguła walidacji zakładająca, że konwersja wielkości liter zachowuje długość, prędzej czy później pęknie na realnych danych.
Jak porównywać dwa ciągi bez uwzględniania wielkości liter?
Używaj case folding zamiast zamiany na wielkie albo małe litery i wskazuj język, gdy istnieje kontekst językowy. Naiwna zamiana na małe litery jest poprawna dla ASCII i daje błędne odpowiedzi dla tureckiego, niemieckiego i kilku innych języków.