Converter camelCase e snake_case
O Conversor de maiúsculas e minúsculas reescreve identificadores entre camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE e mais nove, no seu navegador. A conversão é trivial; a parte difícil é dividir a entrada em palavras — XMLHttpRequest são três palavras, user2fa são três, e um conversor que erra isso produz saída que ninguém quer.
Como funciona o Converter camelCase e snake_case?
Toda convenção de nomenclatura é a mesma lista de palavras renderizada de forma diferente, então converter entre elas é um problema — dividir a entrada em palavras — seguido de uma junção trivial. Os conversores diferem inteiramente no primeiro passo.
Três fronteiras de palavra, em ordem de frequência com que passam despercebidas
A transição de minúscula para maiúscula é a óbvia: userName são duas palavras. Uma sigla seguida de palavra é a que mais conversores erram: XMLHttpRequest é XML Http Request, não uma palavra e nem oito. A transição de letra para dígito é a que ninguém pensa: user2fa é user 2 fa, e é por isso que user2fa vira user_2_fa em vez de user2fa.
Separadores — espaço, sublinhado, hífen, ponto, barra — são todos tratados igual, e é isso que permite à ferramenta aceitar entrada em qualquer convenção sem que você precise dizer qual. Você não escolhe um formato de origem, porque não há o que escolher.
O I turco
"I".toLocaleLowerCase() é "ı" — um i sem ponto — em turco e azeri, não "i". Isso é correto para esses idiomas e catastrófico para código: toda comparação que ignora maiúsculas e minúsculas contra uma string ASCII falha, e um identificador chamado ID vira algo que o compilador não reconhece. Por isso, a conversão de caixa aqui é independente de localidade por padrão, com caixa sensível à localidade disponível para prosa, onde é a resposta certa.
Estilos de prosa mudam a capitalização, não a estrutura
Sentence case e Title case operam sobre o texto em vez de sobre as palavras dele: pontuação, espaçamento e siglas já existentes sobrevivem. O Title case mantém em minúsculas as palavras menores — a, an, the, of, to e as demais — a menos que sejam a primeira ou a última, que é a regra que a maioria dos guias de estilo em inglês compartilha, mesmo discordando sobre a lista.
Preservar siglas é uma escolha de verdade
user_id para PascalCase é UserId ou UserID, dependendo das convenções da sua linguagem — o guia de estilo do Go exige o segundo; o do C# exige o primeiro para siglas de duas letras e o primeiro para as mais longas. Nenhum está errado, então é uma opção de alternância em vez de uma decisão tomada por você.
Entrada
XMLHttpRequest
Convertido
words XML | Http | Request camelCase xmlHttpRequest snake_case xml_http_request CONSTANT XML_HTTP_REQUEST kebab-case xml-http-request
Quais opções e casos-limite o Converter camelCase e snake_case suporta?
| Parâmetro | Tipo | Padrão | Comportamento e casos-limite |
|---|---|---|---|
| camelCase | camel | userFirstName | Variáveis e funções de JavaScript e Java. Primeira palavra em minúscula, o resto em maiúscula. |
| PascalCase | pascal | UserFirstName | Nomes de tipos em quase todas as linguagens: classes, interfaces, componentes React. |
| snake_case | snake | user_first_name | Identificadores em Python e Ruby, e nomes de colunas SQL no Postgres. |
| CONSTANT_CASE | constant | USER_FIRST_NAME | Variáveis de ambiente e constantes de compilação em C, Java, Go e JavaScript. |
| kebab-case | kebab | user-first-name | URLs, propriedades personalizadas de CSS e nomes de classes, nomes de pacotes npm. Não é um identificador válido na maioria das linguagens. |
| Train-Case | train | User-First-Name | Nomes de cabeçalhos HTTP — Content-Type, X-Request-Id — que são insensíveis a maiúsculas e minúsculas, mas convencionalmente escritos desta forma. |
| dot.case | dot | user.first.name | Chaves de configuração aninhadas, chaves de mensagem i18n e namespaces no estilo de pacotes Java. |
| path/case | path | user/first/name | Segmentos de caminho de URL e caminhos de arquivo construídos a partir de um nome. |
| Primeira maiúscula | sentence | User first name | Prosa. Capitaliza a primeira letra de cada frase e mantém o resto inalterado, para que siglas existentes permaneçam. |
| Formato De Título | title | User First Name | Títulos. Palavras menores permanecem em minúsculas, a menos que sejam a primeira ou a última. |
| minúsculas | lower | user first name | A string inteira em minúsculas, pontuação e espaçamento inalterados. |
| MAIÚSCULAS | upper | USER FIRST NAME | A string inteira em maiúsculas. |
| aLtErNaDo | alternating | uSeR fIrSt nAmE | Alternância de maiúsculas e minúsculas, caractere por caractere. |
| iNVERSO | inverse | uSER fIRST nAME | A capitalização de cada letra é invertida. |
Perguntas frequentes
Por que XMLHttpRequest foi dividido em três palavras?
Porque são três. A regra é que uma sequência em caixa alta seguida de uma maiúscula e uma minúscula encerra a palavra na fronteira: XMLH-ttp vira XML | Http. Sem ela, você obtém ou uma palavra só — xmlhttprequest — ou oito, com cada maiúscula iniciando uma nova: x_m_l_http_request. Ambos estão errados e ambos são comuns.
Preciso dizer a ele em que formato está minha entrada?
Não, e não existe opção para isso de propósito. Todo separador é tratado igual e toda fronteira de caixa é detectada, então camelCase, snake_case, kebab-case, dot.case e prosa simples são todos divididos na mesma lista de palavras. Entrada mista funciona também, o que importa quando você está convertendo uma lista que alguém montou a partir de três codebases.
Por que existe uma opção de localidade para minúsculas?
Porque "I".toLocaleLowerCase() é "ı" — um i sem ponto — em turco e azeri. Isso é linguisticamente correto e desastroso para identificadores: uma comparação ASCII contra "id" falha, e código que converte a entrada do usuário para minúsculas para compará-la com uma palavra-chave para de funcionar para usuários turcos. A opção fica desligada por padrão porque o trabalho usual aqui é código, e ligada para prosa nesses idiomas.
UserId ou UserID?
Depende da linguagem. O guia de estilo do Go exige UserID e capitaliza todos os inicialismos — APIURL, HTTPServer. C# e Java usam UserId, capitalizando apenas a primeira letra de siglas com mais de dois caracteres. Nenhum é mais correto; use o que combinar com o código ao redor, e é por isso que isso é uma opção de alternância.
Dá para converter um arquivo inteiro de identificadores?
Um por linha, sim — cada linha é convertida de forma independente, então você pode colar uma coluna de um schema ou de uma configuração e receber tudo de volta. Não é um rename ciente de código: ele não sabe quais palavras em uma linha são identificadores e quais são sintaxe, então converte a linha inteira como um nome só.
Meu texto é enviado?
Não. É manipulação de strings, rodando no seu navegador. Os identificadores que as pessoas convertem descrevem sistemas internos — nomes de tabelas, nomes de campos, feature flags — o que não é exatamente segredo, mas também não é algo para entregar a um servidor desconhecido sem motivo.