Загрузка...
Загрузка...
Как и зачем конвертировать регистр текста: camelCase, snake_case, kebab-case, PascalCase, UPPER CASE. Правила, примеры и онлайн-инструмент.
Всё о UUID v4: формат, версии, генерация в JavaScript, Python, SQL. Когда использовать UUID вместо автоинкремента в базах данных.
РазработкаРуководство по сравнению текстов, кода и конфигураций: diff-алгоритмы, инструменты, форматы вывода и практические сценарии для разработчиков.
РазработкаИсчерпывающее руководство по синтаксису Markdown: заголовки, списки, таблицы, код, ссылки. Справочник для разработчиков и авторов документации.
РазработкаПодробное руководство по онлайн-тестированию PHP: инструменты, ограничения, безопасность и практические сценарии использования. Сравнение с локальной разработкой.
Поделитесь с коллегами или изучите другие материалы блога
Конвертация регистра — преобразование строки из одного стиля написания в другой: из заголовка в slug, из фразы в имя переменной, из названия таблицы в константу. В программировании каждый язык и экосистема диктуют свои соглашения: JavaScript использует camelCase, Python — snake_case, CSS — kebab-case. Понимание этих правил и умение быстро переключаться между форматами экономит время и снижает количество ошибок.
Для быстрой конвертации используйте Case Converter на reChecker.
При разработке постоянно приходится менять формат строк:
Ручное редактирование длинных имён трудоёмко и чревато опечатками. Конвертер регистра выполняет преобразование за один шаг.
Первое слово с маленькой буквы, каждое следующее — с большой. Без пробелов и разделителей.
userName, getElementById, maxRetryCount
Применение: переменные и функции в JavaScript, Java, Swift, Kotlin. Стиль по умолчанию в большинстве современных языков.
Каждое слово с большой буквы. Иначе — Upper Camel Case.
UserName, GetElementById, MaxRetryCount
Применение: классы, интерфейсы, типы в TypeScript, C#, Java, компоненты React.
Слова разделены подчёркиванием, буквы в нижнем регистре.
user_name, get_element_by_id, max_retry_count
Применение: переменные и функции в Python, Ruby, имена колонок в SQL и многих БД, переменные окружения (ENV_VAR).
Слова разделены дефисом, буквы в нижнем регистре.
user-name, get-element-by-id, max-retry-count
Применение: CSS-классы, атрибуты HTML, URL-пути, имена пакетов в npm (частично), slug в CMS.
Верхний регистр и подчёркивания.
USER_NAME, MAX_RETRY_COUNT, API_KEY
Применение: константы в большинстве языков, переменные окружения, макросы в C/C++.
Все буквы заглавные, слова разделены пробелами.
USER NAME, MAX RETRY COUNT
Применение: заголовки, акронимы, визуальное выделение в UI.
Каждое слово с заглавной буквы.
User Name, Get Element By Id
Применение: заголовки статей, названия кнопок, заголовки в интерфейсах.
Только первое слово с заглавной, остальные — строчные.
User name, Get element by id
Применение: подзаголовки, описания, текст в интерфейсах.
Все буквы строчные, без разделителей.
username, getelementbyid
Применение: домены, имена файлов (в Unix), иногда логины.
Алгоритм состоит из трёх шагов: разбиение на слова, нормализация, сборка в целевой формат.
Исходная строка разбивается по разделителям и границам регистра:
getElementById → get, Element, By, Id)// Упрощённый пример разбиения
function splitWords(str) {
return str
.replace(/([a-z])([A-Z])/g, '$1 $2')
.replace(/[\s_-]+/g, ' ')
.trim()
.toLowerCase()
.split(' ');
}
// "getElementById" → ["get", "element", "by", "id"]
После разбиения слова собираются по правилам:
| Формат | Правило |
|---|---|
| camelCase | первое слово lowercase, остальные capitalize |
| PascalCase | все слова capitalize |
| snake_case | слова через _, lowercase |
| kebab-case | слова через -, lowercase |
| UPPER_CASE | слова через _, uppercase |
| Title Case | слова через пробел, capitalize |
| Sentence case | первое слово capitalize, остальные lowercase |
Title Case подходит для коротких заголовков, названий кнопок и пунктов меню. Sentence case — для длинных описаний, подзаголовков и текста, где важна естественная читаемость. В интерфейсах часто смешивают: H1 в Title Case, основной текст — в Sentence case.
| Контекст | Стиль | Пример |
|---|---|---|
| JavaScript/TypeScript переменные | camelCase | userName |
| JavaScript/TypeScript классы | PascalCase | UserProfile |
| React компоненты | PascalCase | ButtonGroup |
| CSS классы | kebab-case | button-group |
| HTML атрибуты | kebab-case | data-user-id |
| Python переменные и функции | snake_case | user_name |
| Python классы | PascalCase | UserProfile |
| SQL колонки | snake_case | created_at |
| Константы | UPPER_CASE | MAX_PAGE_SIZE |
| Переменные окружения | UPPER_CASE | DATABASE_URL |
| URL пути | kebab-case | /user-profile |
| npm пакеты | kebab-case | react-dom |
| JSON ключи | camelCase (часто) | {"userId": 1} |
Строки вроде HTMLParser или getUserID при разбиении могут дать неожиданный результат. Стандартный split по границе регистра даёт:
HTMLParser → HTML, Parser → html-parser (kebab) или htmlParser (camel)
getUserID → get, User, ID → get-user-id или getUserId
Проблема: ID и Id — разные варианты. В camelCase часто пишут getUserId (только первая буква аббревиатуры заглавная, если она не в начале). Единого стандарта нет: важно выбрать правило и придерживаться его в проекте.
user2user или item2 — цифры не создают границу слова. Результат зависит от реализации:
user2user → user2user (camel) или user-2-user (kebab, если числа обрабатываются)
Многие конвертеры не разбивают по цифрам. Для user2user kebab-case может быть user2user (без изменений) или user-2-user (если цифры считаются разделителем).
parseHTML — корректно разбивается на parse, HTML. Но getHTTPResponse может дать get, H, T, T, P, Response при наивном разбиении. Качественный конвертер должен распознавать последовательности заглавных как одно слово: get, HTTP, Response.
Строки только из пробелов, несколько подряд разделителей, символы вроде @ или # — результат зависит от реализации. Обычно лишние разделители схлопываются, неизвестные символы либо сохраняются, либо отбрасываются.
При работе с кириллицей и латиницей конвертация затрагивает только латинские буквы. Кириллица в camelCase, snake_case и kebab-case обычно остаётся без изменений или приводится к нижнему регистру. Для slug и URL кириллицу часто транслитерируют (например, «Москва» → moskva), что выходит за рамки простой конвертации регистра.
Бэкенд отдаёт snake_case, фронтенд ожидает camelCase:
function snakeToCamel(str) {
return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
}
const apiKey = 'user_profile_data';
console.log(snakeToCamel(apiKey)); // "userProfileData"
function titleToSlug(title) {
return title
.toLowerCase()
.replace(/[^\w\s-]/g, '')
.replace(/\s+/g, '-')
.replace(/-+/g, '-')
.trim();
}
console.log(titleToSlug('Как настроить SSL-сертификат?')); // "kak-nastroit-ssl-sertifikat"
def snake_to_camel(name: str) -> str:
components = name.split('_')
return components[0].lower() + ''.join(x.title() for x in components[1:])
print(snake_to_camel('created_at')) # createdAt
print(snake_to_camel('user_profile')) # userProfile
function pascalToKebab(str) {
return str
.replace(/([a-z])([A-Z])/g, '$1-$2')
.replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')
.toLowerCase();
}
console.log(pascalToKebab('ButtonGroup')); // "button-group"
console.log(pascalToKebab('HTMLParser')); // "html-parser" (при корректной обработке аббревиатур)
function toConstant(str) {
return str
.replace(/([a-z])([A-Z])/g, '$1_$2')
.replace(/[\s-]+/g, '_')
.toUpperCase();
}
console.log(toConstant('maxPageSize')); // "MAX_PAGE_SIZE"
При работе с несколькими языками или системами конвертация становится обязательной. Типичные сценарии:
Многие API отдают JSON с snake_case (Ruby, Python) или camelCase (Node.js, Java). При десериализации в объекты нужно привести ключи к стилю языка:
// API возвращает { user_name: "Ivan", created_at: "2026-03-08" }
// Нужно преобразовать в { userName, createdAt } для фронтенда
function keysToCamel(obj) {
if (Array.isArray(obj)) return obj.map(keysToCamel);
if (obj !== null && typeof obj === 'object') {
return Object.fromEntries(
Object.entries(obj).map(([k, v]) => [
k.replace(/_([a-z])/g, (_, c) => c.toUpperCase()),
keysToCamel(v)
])
);
}
return obj;
}
Колонки в PostgreSQL и MySQL обычно в snake_case. ORM вроде Sequelize, TypeORM или SQLAlchemy позволяют задать маппинг: created_at в БД → createdAt в модели. При ручных запросах или миграциях важно сохранять единый стиль.
В package.json поля в camelCase (devDependencies), в docker-compose.yml — в kebab-case (build-context), в .env — UPPER_CASE (DATABASE_URL). При генерации конфигов из шаблонов или при копировании между проектами конвертер регистра помогает избежать ошибок.
Case Converter на reChecker поддерживает все основные форматы: вставьте текст и получите результат в нужном стиле. Удобно для разовых преобразований, имён переменных, заголовков и slug.
В VS Code и других редакторах есть расширения для переименования с конвертацией (например, "Change Case"). Позволяют выделить слово и переключить регистр по горячей клавише.
В Node.js популярна библиотека change-case с функциями camelCase, snakeCase, kebabCase и другими. В Python — stringcase или ручная реализация через регулярные выражения. Для CI/CD и скриптов миграции такие утилиты незаменимы.
Конвертер регистра — простой, но полезный инструмент в повседневной работе разработчика. Понимание форматов и умение быстро переключаться между ними упрощает рефакторинг, интеграцию API и поддержку кода. Используйте Case Converter для быстрой конвертации между camelCase, snake_case, kebab-case и другими форматами.