Validar nombre de variable de entorno según POSIX
Compruebe si el nombre de una variable de entorno es portable antes de que rompa un despliegue: DATABASE_URL es válido, mientras que un nombre que empieza por un dígito o lleva un guion falla indicando la regla incumplida. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Texto
- DATABASE_URL
- Nombre
- DATABASE_URL
- Convención
- POSIX
Los nombres de variables de entorno parecen sencillos hasta que un despliegue falla por un dígito inicial, un guion, un espacio o un carácter no portátil. Este validador comprueba un nombre según la convención POSIX: permite letras ASCII, dígitos y guiones bajos, pero exige una letra o un guion bajo al principio. Si el nombre es válido, lo confirma con claridad; si no, señala la regla incumplida. Así puede utilizarlo en editores, formularios, controles de CI y generadores de configuración.
Qué acepta el validador
Un nombre portátil utiliza un conjunto de caracteres reducido a propósito. El primer carácter debe ser una letra ASCII de A a Z o de a a z, o un guion bajo. Después también se permiten los dígitos del 0 al 9.
Por eso pasan DATABASE_URL, HOME, _INTERNAL_FLAG y API2_TOKEN. El validador examina la cadena completa sin repararla, normalizarla ni recortarla. Esa severidad evita que una limpieza silenciosa transforme lo que usted escribió en otro identificador.
Se conservan las mayúsculas y minúsculas: PATH y Path son nombres distintos. La prueba solo cubre la sintaxis portátil; no determina si la variable existe, está exportada, tiene valor o es compatible con un programa concreto. La respuesta correcta devuelve el nombre original, un indicador de validez y una confirmación breve.
Cómo se explican los nombres no válidos
Cada tipo de error recibe una explicación específica. Una cadena vacía falla porque carece de carácter inicial. Si empieza por un dígito, se informa de la regla del primer carácter, aunque los dígitos sí sean válidos después.
Un guion, un punto, un espacio o una letra fuera de ASCII al comienzo tampoco cumplen la condición. Si el inicio es correcto pero aparece otro carácter prohibido más adelante, el mensaje identifica dicho carácter y su posición, contada desde 1. Una asignación como NAME=value tampoco es un nombre: el signo igual se rechaza.
Cómo integrarlo en su flujo de desarrollo
Esta comprobación resulta útil antes de que la configuración llegue a un shell o al entorno de un proceso. Un formulario de despliegue puede validar una clave al enviarla y mostrar la regla que requiere atención. Un generador puede rechazar claves incorrectas antes de crear un archivo dotenv, un manifiesto de contenedor, una definición de servicio o un mapa de secretos de CI.
Los linters también pueden aplicar la misma regla a plantillas y ejemplos. La validez sintáctica no garantiza compatibilidad: una herramienta concreta puede reservar prefijos o imponer reglas adicionales.
Qué puede hacer con ella
Validar ajustes de despliegue
Compruebe los nombres antes de guardar una configuración que el entorno de ejecución no podría exponer de forma fiable.
Proteger generadores dotenv
Rechace claves incorrectas antes de producir un archivo que solo fallaría al iniciar la aplicación.
Añadir un control de nombres a CI
Verifique plantillas y nombres documentados mediante una regla determinista durante las comprobaciones del repositorio.
Preguntas frecuentes
¿Qué caracteres están permitidos?
Se permiten letras ASCII, dígitos y guiones bajos. El primer carácter debe ser una letra ASCII o un guion bajo.
¿Puede empezar por un dígito?
No. Los dígitos solo se permiten después del primer carácter: 2FA_TOKEN falla y TOKEN_2FA pasa.
¿Comprueba si existe la variable?
No. Solo valida el nombre propuesto; no lee el entorno ni comprueba si la variable está exportada o asignada.
¿Son válidos los nombres en minúsculas?
Sí. Las letras ASCII mayúsculas y minúsculas son válidas, y se conserva exactamente el uso original.
¿Corrige o recorta un nombre no válido?
No. Se comprueba el texto completo tal como lo escribió, sin quitar espacios ni reparar caracteres, porque una limpieza silenciosa podría convertir su nombre en otro distinto. En su lugar, el error le dice qué regla falló y dónde.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/dev/env-var-name-validate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"DATABASE_URL"}'const res = await fetch("https://api.kit.forhosting.com/dev/env-var-name-validate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "DATABASE_URL"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/env-var-name-validate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "DATABASE_URL"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/env-var-name-validate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"DATABASE_URL"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"DATABASE_URL"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/env-var-name-validate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"text": "DATABASE_URL"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.env_var_name_validate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Cómo se explican los nombres no válidos
Por ejemplo, API-KEY falla por el guion y API KEY por el espacio. Los errores tipados utilizan invalid_input, de modo que un cliente API puede distinguir un dato corregible de un fallo interno sin interpretar textos de transporte.
Cómo integrarlo en su flujo de desarrollo
El algoritmo no usa red, no lee el entorno, no almacena datos y no depende de la hora ni del azar; por tanto, ofrece el mismo resultado en el navegador, una prueba automatizada y la API. Una solicitud API cuesta $0.002.
Preguntas técnicas
¿Se permiten guiones o puntos?
No. Un guion, punto, espacio, signo igual u otro carácter ajeno al conjunto portátil produce invalid_input.
¿Cuánto cuesta una solicitud API?
Cada solicitud API cuesta $0.002. La misma comprobación determinista también puede ejecutarse en el navegador.