Analizador SemVer
Separe una versión como 1.2.3-alpha.1+build.7 en major 1, minor 2, patch 3, prerelease alpha.1 y build build.7, comprobada de forma estricta según SemVer 2.0.0. Una etiqueta mal formada se rechaza indicando la regla que incumple. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Texto
- 1.2.3-alpha.1+build.7
- Versión
- 1.2.3-alpha.1+build.7
- Mayor
- 1
- Menor
- 2
- Parche (patch)
- 3
Una versión no son solo tres números: los identificadores opcionales de prerelease unidos por guiones y los metadatos de build con prefijo más cambian cómo se etiqueta y se compara un lanzamiento. Este analizador de versión SemVer acepta una sola cadena, la valida de forma estricta contra la especificación oficial SemVer 2.0.0 y devuelve los componentes numéricos major, minor y patch junto con cualquier identificador de prerelease y de build.
Qué permite realmente SemVer 2.0.0
El versionado semántico 2.0.0 define una versión como MAJOR.MINOR.PATCH, tres enteros no negativos unidos por puntos, con identificadores opcionales de prerelease unidos por un guion y metadatos opcionales de build con prefijo más. Cada uno de major, minor y patch es un identificador numérico: o bien un cero suelto, o bien una cifra del uno al nueve seguida de más dígitos, de modo que 1.0.0 es válido y 01.0.0 no lo es.
Una versión de prerelease es el núcleo seguido de un guion y uno o más identificadores separados por puntos, como alpha, rc.1 o 0.3.4. Un identificador de prerelease es o bien un identificador numérico con la misma regla de no ceros a la izquierda, o bien un identificador alfanumérico que contiene al menos una letra o un guion y, por lo demás, solo letras ASCII, dígitos y guiones.
Los metadatos de build siguen a un signo más y usan el mismo alfabeto de identificadores, salvo que los identificadores de build formados solo por dígitos pueden conservar ceros a la izquierda, así que 1.0.0+001 es legal. Los identificadores vacíos, los puntos consecutivos, un guion o un más finales, un v inicial, las versiones de dos partes como 1.2 y las letras no ASCII son ilegales.
Este analizador implementa esa gramática como un escáner de izquierda a derecha, no como una expresión regular permisiva, de modo que un fallo nombra la regla rota en lugar de devolver un objeto a medias. El orden de comparación queda fuera de alcance: la capacidad analiza y valida, no clasifica dos versiones entre sí.
Dónde un analizador SemVer aporta valor real
Los registros de paquetes, los bots de publicación y los generadores de changelog necesitan un solo sitio que responda si una etiqueta es una versión SemVer legal y cuáles son sus cinco partes. Un trabajo de integración continua que se niega a publicar cuando la etiqueta git es v1.2.3 en lugar de 1.2.3, o cuando alguien escribió solo 1.2, evita un lanzamiento roto antes de que llegue a un registro.
Los escáneres de dependencias que leen lockfiles quieren campos estructurados major, minor, patch y prerelease sin arrastrar un motor semver propio de un lenguaje a un worker de borde. Quien enseña versionado quiere una landing dedicada que explique los ceros a la izquierda y los metadatos de build, no enterrar el tema bajo un divisor de cadenas genérico. La validación fallida no consume saldo.
Mantenga las cadenas bajo el límite de longitud documentado, fije los campos estructurados en las pruebas y obtendrá componentes reproducibles para herramientas de publicación, complementos de aprendizaje y workers de borde sin montar una biblioteca semver propia de un lenguaje.
Qué puede hacer con ella
Validar etiquetas git antes de publicar
Rechace un trabajo de publicación cuando la etiqueta sea v1.2.3, 1.2 u 01.0.0 en lugar de una versión SemVer 2.0.0 legal.
Partir versiones de un lockfile o SBOM
Convierta cada versión de dependencia en campos major, minor, patch, prerelease y build para escáneres y paneles.
Preguntas frecuentes
¿Qué cadena de versión SemVer 2.0.0 es válida?
MAJOR.MINOR.PATCH con -prerelease y +build opcionales, solo letras ASCII, dígitos y guiones. Ejemplo: 1.2.3-alpha.1+build.7. Las versiones de dos partes y un v inicial no son válidos.
¿Acepta el analizador un v inicial, como v1.2.3?
No. SemVer 2.0.0 no permite un prefijo v. Envíe 1.2.3.
¿Por qué se rechaza 01.0.0?
Los identificadores numéricos no deben llevar ceros a la izquierda. 0 es válido como identificador completo (0.1.0), pero 01 no lo es. La misma regla aplica a identificadores numéricos de prerelease como 01 en 1.0.0-01.
¿Cómo se devuelven prerelease y build cuando faltan?
Esas claves se omiten, nunca se ponen a null.
¿Pueden los metadatos de build llevar ceros a la izquierda?
Sí. Tras el signo más, un identificador de build formado solo por dígitos puede conservar ceros a la izquierda, así que 1.0.0+001 es válido. Major, minor, patch y los identificadores numéricos de prerelease no pueden llevarlos.
¿Me dice cuál de dos versiones es más reciente?
No. Analiza y valida una versión cada vez y no ordena unas versiones frente a otras. Si necesita ordenar o comparar, use en sus propias herramientas las partes estructuradas que devuelve.
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/semver-parse \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"1.2.3-alpha.1+build.7"}'const res = await fetch("https://api.kit.forhosting.com/dev/semver-parse", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "1.2.3-alpha.1+build.7"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/semver-parse",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "1.2.3-alpha.1+build.7"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/semver-parse", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"1.2.3-alpha.1+build.7"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"1.2.3-alpha.1+build.7"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/semver-parse", 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": "1.2.3-alpha.1+build.7"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.semver_parse",
"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.
Límites
max_chars | 256 |
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
El versionado semántico (SemVer 2.0.0) es la gramática de versiones que usan los paquetes npm, las crates de Rust, los módulos de Go y la mayoría de las API públicas. Los prefijos v iniciales, los números de patch ausentes, los ceros a la izquierda en identificadores numéricos, los identificadores vacíos y los caracteres no ASCII se rechazan con invalid_input en lugar de reescribirse en silencio.
Contrato de entrada, forma de respuesta y errores
Se recortan los espacios alrededor; la cadena restante debe ser una versión SemVer 2.0.0 completa. No envíe un v inicial, un operador de rango ni un atajo de dos partes. Esos fallos no se facturan. Envíe un cuerpo JSON con el campo de cadena obligatorio text (alias version, semver, value). En caso de éxito el cuerpo reitera version como la entrada recortada, major, minor y patch como enteros seguros, core como la subcadena MAJOR.MINOR.PATCH, e is_prerelease como booleano. Cuando hay una sección de prerelease, prerelease es la cadena de identificadores sin el guion inicial y prerelease_identifiers es la matriz partida; ambas claves se omiten si no hay prerelease. Cuando hay metadatos de build, build y build_identifiers aparecen del mismo modo y se omiten en caso contrario, así que los clientes nunca ven null. Ejemplo: 1.2.3-alpha.1+build.7 produce major 1, minor 2, patch 3, prerelease alpha.1, build build.7 e is_prerelease true. Falta de text, una cadena vacía, un texto de más de doscientos cincuenta y seis caracteres, un número en lugar de una cadena, ceros a la izquierda en major, minor, patch o un identificador numérico de prerelease, caracteres ilegales, caracteres sobrantes tras la versión y un v inicial fallan con invalid_input y un mensaje en inglés que nombra el campo o la regla rota. El precio de API en éxito es la base publicada de $0.002 por ítem.
Dónde un analizador SemVer aporta valor real
Como la implementación es parse puro de nivel A, cada llamada correcta cuesta el precio base publicado $0.002 sin tokens de modelo ni red de salida.
Casos de integración
Enseñar la gramática SemVer
Muestre al alumnado qué cadenas acepta la especificación y cuáles rechaza, con las mismas reglas que aplica la API.
Preguntas técnicas
¿Cuánto cuesta el analizador de versión SemVer?
La herramienta del navegador es gratuita. Las peticiones API usan saldo prepago KIT a $0.002 por llamada correcta; la entrada inválida no se factura.