Saltar al contenido principal

Convertir mayúsculas y minúsculas

El conversor de mayúsculas y minúsculas reescribe identificadores entre camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE y nueve más, en tu navegador. La conversión es trivial; la parte difícil es dividir la entrada en palabras — XMLHttpRequest son tres palabras, user2fa son tres, y un conversor que se equivoque en eso produce una salida que nadie quiere.

Solo local
Entrada (un identificador por línea)
0 B1 líneaLín. 1, Col. 1
camelCase
 
PascalCase
 
snake_case
 
CONSTANT_CASE
 
kebab-case
 
Train-Case
 
dot.case
 
path/case
 
Tipo oración
 
Tipo Título
 
minúsculas
 
MAYÚSCULAS
 
aLtErNaDo
 
iNVERSO
 

¿Cómo funciona Convertir mayúsculas y minúsculas?

Toda convención de nombres es la misma lista de palabras representada de otra forma, así que convertir entre ellas es un solo problema — dividir la entrada en palabras — seguido de una unión trivial. Los conversores difieren por completo en el primer paso.

Tres límites entre palabras, ordenados según la frecuencia con que se pasan por alto

Una transición de minúscula a mayúscula es la obvia: userName son dos palabras. Una sigla seguida de una palabra es la que más conversores hacen mal: XMLHttpRequest es XML Http Request, y no una palabra ni ocho. Una transición de letra a dígito es la que nadie tiene en cuenta: user2fa es user 2 fa, que es la razón por la que user2fa se convierte en user_2_fa en lugar de user2fa.

Los separadores — espacio, guion bajo, guion, punto, barra — se tratan todos por igual, y eso es lo que permite que la herramienta acepte la entrada en cualquier convención sin que se lo digas. No eliges un formato de origen, porque no hay nada que elegir.

La i turca

"I".toLocaleLowerCase() da "ı" — una i sin punto — en turco y azerí, y no "i". Eso es correcto para esas lenguas y catastrófico para el código: toda comparación que no distingue mayúsculas de minúsculas contra una cadena ASCII falla, y un identificador llamado ID se convierte en algo que un compilador no reconoce. Por eso aquí las mayúsculas y minúsculas se manejan por defecto de forma independiente de la configuración regional, y el modo que sí la tiene en cuenta queda disponible para la prosa, donde es la respuesta correcta.

Los estilos de prosa cambian las mayúsculas, no la estructura

Sentence case y Title case operan sobre el texto y no sobre sus palabras: la puntuación, los espacios y las siglas existentes sobreviven. Title case mantiene en minúsculas las palabras menores — a, an, the, of, to y el resto — salvo si son la primera o la última, que es la regla que comparten la mayoría de las guías de estilo del inglés aunque discrepen sobre la lista.

Conservar las siglas es una decisión genuina

user_id a PascalCase es UserId o UserID según las convenciones de tu lenguaje — la guía de estilo de Go exige el segundo, y la de C# exige el primero para las siglas de dos letras y el primero para las más largas. Ninguno está mal, así que es un conmutador y no una decisión tomada por ti.

Entrada

XMLHttpRequest

Convertido

words        XML | Http | Request
camelCase    xmlHttpRequest
snake_case   xml_http_request
CONSTANT     XML_HTTP_REQUEST
kebab-case   xml-http-request

¿Qué opciones y casos límite admite Convertir mayúsculas y minúsculas?

Referencia técnica y opciones
ParámetroTipoValor predeterminadoComportamiento y casos límite
camelCasecameluserFirstNameVariables y funciones de JavaScript y Java. Primera palabra en minúscula, el resto con mayúscula inicial.
PascalCasepascalUserFirstNameNombres de tipos en casi todos los lenguajes: clases, interfaces, componentes de React.
snake_casesnakeuser_first_nameIdentificadores de Python y Ruby, y nombres de columnas SQL en Postgres.
CONSTANT_CASEconstantUSER_FIRST_NAMEVariables de entorno y constantes de tiempo de compilación en C, Java, Go y JavaScript.
kebab-casekebabuser-first-nameURLs, propiedades personalizadas de CSS y nombres de clase, nombres de paquetes npm. No es un identificador válido en la mayoría de los lenguajes.
Train-CasetrainUser-First-NameNombres de encabezados HTTP — Content-Type, X-Request-Id — que no distinguen entre mayúsculas y minúsculas, pero se escriben convencionalmente de esta manera.
dot.casedotuser.first.nameClaves de configuración anidadas, claves de mensajes i18n y espacios de nombres de estilo de paquetes de Java.
path/casepathuser/first/nameSegmentos de ruta URL y rutas de archivo construidas a partir de un nombre.
Tipo oraciónsentenceUser first nameProsa. Capitaliza la primera letra de cada oración y deja el resto como está, por lo que los acrónimos existentes sobreviven.
Tipo TítulotitleUser First NameEncabezados. Las palabras menores permanecen en minúsculas a menos que sean la primera o la última.
minúsculasloweruser first nameLa cadena completa en minúsculas, puntuación y espaciado intactos.
MAYÚSCULASupperUSER FIRST NAMELa cadena completa en mayúsculas.
aLtErNaDoalternatinguSeR fIrSt nAmEAlternancia de mayúsculas y minúsculas, carácter por carácter.
iNVERSOinverseuSER fIRST nAMELa case de cada letra se invierte.

Preguntas frecuentes

¿Por qué XMLHttpRequest se dividió en tres palabras?

Porque son tres. La regla dice que una secuencia toda en mayúsculas seguida de una mayúscula y una minúscula termina la palabra en esa frontera: XMLH-ttp se convierte en XML | Http. Sin ella obtienes o una sola palabra — xmlhttprequest — u ocho, con cada mayúscula empezando una nueva: x_m_l_http_request. Las dos opciones están mal y las dos son habituales.

¿Tengo que indicarle en qué formato está mi entrada?

No, y deliberadamente no existe ninguna opción para eso. Todos los separadores se tratan por igual y se detecta cada frontera de mayúsculas, así que camelCase, snake_case, kebab-case, dot.case y la prosa normal se dividen en la misma lista de palabras. La entrada mixta también funciona, algo que importa cuando conviertes una lista que alguien armó a partir de tres bases de código.

¿Por qué hay una opción regional para pasar a minúsculas?

Porque "I".toLocaleLowerCase() da "ı" — una i sin punto — en turco y azerí. Es lingüísticamente correcto y desastroso para los identificadores: una comparación ASCII contra "id" falla, y el código que pasa a minúsculas la entrada del usuario para compararla con una palabra clave deja de funcionar para los usuarios turcos. La opción viene desactivada por defecto porque el trabajo habitual aquí es código, y activada para la prosa en esas lenguas.

¿UserId o UserID?

Depende del lenguaje. La guía de estilo de Go exige UserID y pone mayúscula en cada sigla — APIURL, HTTPServer. C# y Java usan UserId, con mayúscula solo en la primera letra de una sigla de más de dos caracteres. Ninguno es más correcto; usa el que coincida con el código que lo rodea, y por eso esto es un conmutador.

¿Puede convertir un archivo entero de identificadores?

Uno por línea, sí — cada línea se convierte de forma independiente, así que puedes pegar una columna de un esquema o de una configuración y recuperar el conjunto entero. No es un renombrado que entienda el código: no sabe qué palabras de una línea son identificadores y cuáles son sintaxis, así que convierte la línea entera como un solo nombre.

¿Se sube mi texto?

No. Es manipulación de cadenas que se ejecuta en tu navegador. Los identificadores que la gente convierte describen sistemas internos — nombres de tablas, nombres de campos, feature flags —, lo cual no es exactamente secreto, y tampoco es algo que se entregue a un servidor desconocido sin motivo.