Compare números de versión semántica según SemVer
Sepa cuál de dos versiones va realmente primero: 1.0.0-alpha.1 es menor que 1.0.0-alpha.beta, porque una etiqueta numérica siempre queda por debajo de una palabra, y 2.10.0 supera correctamente a 2.9.0. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Primera versión
- 1.0.0-alpha.1
- Segunda versión
- 1.0.0-alpha.beta
- Comparación
- less
- Precedencia
- -1
- Versión mayor
- 1.0.0-alpha.beta
Compare dos números de versión semántica sin depender del orden lexicográfico, conversiones de coma flotante ni atajos propios de un gestor de paquetes. Esta capacidad valida ambas entradas conforme a Semantic Versioning 2.0.0 y aplica las reglas oficiales de precedencia a los componentes mayor, menor, parche y preliminar. Indica si la primera versión es menor, mayor o equivalente en precedencia a la segunda, e ignora correctamente los metadatos de compilación. Las versiones incompletas o no válidas generan un error de entrada claro, no un orden engañoso.
Compare versiones con las reglas que utilizan las publicaciones de software
Una comparación de cadenas normal produce respuestas erróneas para muchos números de versión. Por ejemplo, un orden lexicográfico puede colocar 2.10.0 antes de 2.9.0 porque compara el carácter 1 con el 9, mientras que una conversión numérica elimina el significado separado de las posiciones mayor, menor y parche. Este comparador analiza cada posición obligatoria por separado y las compara de izquierda a derecha.
También rechaza formatos flexibles, como la omisión del parche, una v inicial o un identificador numérico principal con cero inicial. Esta validación estricta resulta útil en scripts de despliegue, registros de paquetes, servicios de actualización y controles de CI, ya que los datos mal formados no pueden pasar inadvertidamente como publicaciones legítimas. Envíe las dos versiones exactamente como se publicaron.
El resultado incluye una precedencia con signo: menos uno indica que la primera es inferior, cero que son equivalentes y uno que la primera es superior. Un campo descriptivo facilita usar la misma respuesta en interfaces y condiciones de flujo.
Comprenda el orden preliminar y los metadatos de compilación
Los identificadores preliminares son donde más fallan los comparadores simplificados. Una publicación con sufijo preliminar tiene menor precedencia que la misma versión mayor, menor y de parche sin dicho sufijo; por eso 1.0.0-rc.1 es inferior a 1.0.0. Si ambas versiones son preliminares, los identificadores se comparan en secuencia.
Los numéricos se ordenan por magnitud, los no numéricos según el orden léxico ASCII y un identificador numérico siempre tiene menor precedencia que uno no numérico. Si todos los identificadores compartidos coinciden, la versión con más identificadores tiene mayor precedencia. Así se reproduce la progresión estándar desde alpha hasta beta y las versiones candidatas sin atribuir un significado especial a palabras concretas.
Los metadatos posteriores al signo más se validan, pero no intervienen en la precedencia. Por tanto, 1.0.0+linux y 1.0.0+windows son equivalentes aunque sus cadenas difieran.
Utilice una comparación estricta y segura en automatizaciones
Un resultado determinista puede convertirse en un punto de decisión pequeño y fiable dentro de sistemas mayores. Una canalización de publicación puede exigir que la versión propuesta supere a la desplegada. Un actualizador puede decidir si un manifiesto descargado representa una mejora, una reversión o una compilación equivalente.
Un conjunto de pruebas puede cubrir la secuencia preliminar canónica y rechazar etiquetas no válidas antes de publicar artefactos. La implementación no realiza solicitudes de red, no consulta el reloj y no utiliza valores aleatorios; las mismas entradas siempre ofrecen la misma salida. Los identificadores numéricos se comparan como cadenas de dígitos, en vez de convertirlos en números de JavaScript, para conservar el orden correcto incluso si un identificador válido supera el intervalo de enteros seguros.
La longitud de las entradas está limitada para mantener acotado el procesamiento.
Qué puede hacer con ella
Proteja una canalización de publicación
Confirme que una versión de paquete propuesta tenga mayor precedencia que la versión desplegada antes de publicarla.
Evalúe manifiestos de actualización
Determine si una publicación remota es una mejora, una reversión o una compilación equivalente sin que influyan los metadatos.
Valide secuencias preliminares
Compruebe el orden de versiones alpha, beta, candidatas y finales, y rechace cadenas Semantic Versioning mal formadas.
Preguntas frecuentes
¿Qué significa el valor de comparación?
Una precedencia de -1 indica que la primera versión es inferior, 0 que ambas son equivalentes y 1 que la primera es superior.
¿Influyen los metadatos de compilación en el resultado?
No. Los metadatos se validan, pero Semantic Versioning los excluye de las comparaciones de precedencia.
¿Una versión preliminar es inferior a la publicación final correspondiente?
Sí. Con números mayor, menor y de parche idénticos, una versión con identificadores preliminares tiene menor precedencia que la final.
¿Se admiten ceros iniciales?
Los identificadores numéricos mayor, menor, parche y preliminares no pueden tener ceros iniciales, salvo el dígito cero por sí solo.
¿Puedo incluir una v inicial u omitir el número de parche?
No. Las entradas deben ser cadenas estrictas de Semantic Versioning 2.0.0, como 1.2.3 o 1.2.3-rc.1.
¿Cuánto cuesta?
El ejecutor del navegador está disponible para consultas interactivas.
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/dev2/semver-compare \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"first_version":"2.1.0-rc.1","second_version":"2.1.0"}'const res = await fetch("https://api.kit.forhosting.com/dev2/semver-compare", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"first_version": "2.1.0-rc.1",
"second_version": "2.1.0"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/semver-compare",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"first_version": "2.1.0-rc.1",
"second_version": "2.1.0"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/semver-compare", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"first_version":"2.1.0-rc.1","second_version":"2.1.0"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"first_version":"2.1.0-rc.1","second_version":"2.1.0"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/semver-compare", 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
{
"first_version": "2.1.0-rc.1",
"second_version": "2.1.0"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.semver_compare",
"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_per_version | 1024 |
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
Comprenda el orden preliminar y los metadatos de compilación
Si la precedencia es igual, greater_version es null porque ninguna entrada supera a la otra.
Utilice una comparación estricta y segura en automatizaciones
Use el ejecutor del navegador para una consulta interactiva o llame a la API por $0.002 en un flujo repetible. Trate invalid_input como un problema de calidad de datos que debe corregirse.