Compare números de versão semântica pelas regras SemVer
Descubra qual de duas versões vem mesmo primeiro: 1.0.0-alpha.1 é menor que 1.0.0-alpha.beta, porque um rótulo numérico sempre fica abaixo de uma palavra, e 2.10.0 supera corretamente 2.9.0. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Primeira versão
- 1.0.0-alpha.1
- Segunda versão
- 1.0.0-alpha.beta
- Comparação
- less
- Precedência
- -1
- Versão maior
- 1.0.0-alpha.beta
Compare dois números de versão semântica sem depender de ordenação lexical, conversão de ponto flutuante ou atalhos específicos de gerenciadores de pacotes. Esta capacidade valida as duas entradas conforme o Semantic Versioning 2.0.0 e aplica as regras oficiais de precedência aos componentes principal, secundário, de correção e de pré-lançamento. Ela informa se a primeira versão tem precedência menor, maior ou igual à segunda e ignora corretamente os metadados de compilação. Versões inválidas ou incompletas geram um erro de entrada claro, em vez de uma ordenação enganosa.
Compare versões com as regras usadas em lançamentos de software
A comparação comum de textos fornece a resposta errada para muitos números de versão. Por exemplo, uma ordenação lexical pode colocar 2.10.0 antes de 2.9.0 porque compara o caractere 1 com o 9, enquanto a conversão numérica elimina o significado separado das posições principal, secundária e de correção. Este comparador analisa cada posição obrigatória de forma independente e as compara da esquerda para a direita.
Ele também rejeita formatos flexíveis, como a ausência do componente de correção, uma v inicial ou um identificador numérico principal com zero à esquerda. Essa validação rigorosa é valiosa em scripts de implantação, registros de pacotes, serviços de atualização e verificações de CI, pois dados malformados não passam silenciosamente como lançamentos legítimos. Envie a primeira e a segunda versões exatamente como foram publicadas.
O resultado contém uma precedência com sinal: menos um significa que a primeira é menor, zero indica equivalência e um significa que a primeira é maior. Um campo descritivo facilita o uso da mesma resposta em interfaces e condições de fluxo.
Entenda a ordem de pré-lançamento e os metadados de compilação
Os identificadores de pré-lançamento são o ponto em que comparadores simplistas mais falham. Um lançamento com sufixo de pré-lançamento tem precedência menor que a mesma versão principal, secundária e de correção sem o sufixo; portanto, 1.0.0-rc.1 é menor que 1.0.0. Quando ambas são pré-lançamentos, os identificadores são comparados em sequência.
Os numéricos são comparados por magnitude, os não numéricos pela ordem lexical ASCII, e um identificador numérico sempre tem precedência menor que um não numérico. Se todos os identificadores compartilhados forem iguais, a versão com mais identificadores terá precedência maior. Essas regras reproduzem a progressão padrão de alpha para beta e candidatos a lançamento sem atribuir significado especial a palavras específicas.
Metadados após o sinal de adição são validados, mas propositalmente excluídos da precedência. Assim, 1.0.0+linux e 1.0.0+windows são equivalentes apesar de diferentes.
Use a comparação rigorosa com segurança na automação
Um resultado determinístico pode servir como um pequeno e confiável ponto de decisão em sistemas maiores. Um pipeline de lançamento pode exigir que a versão proposta seja superior à implantada. Um atualizador pode decidir se um manifesto baixado representa atualização, reversão ou compilação equivalente.
Uma suíte de testes pode cobrir a sequência canônica de pré-lançamentos e rejeitar rótulos inválidos antes da publicação dos artefatos. A implementação não faz solicitações de rede, não consulta o relógio e não usa valores aleatórios; as mesmas entradas sempre produzem a mesma saída. Ela compara identificadores numéricos como sequências de dígitos, em vez de convertê-los em números JavaScript, preservando a ordem correta mesmo quando um identificador válido ultrapassa o intervalo de inteiros seguros.
O tamanho das entradas é limitado para manter o processamento previsível.
Casos de uso
Proteja um pipeline de lançamento
Confirme que uma versão de pacote proposta tenha precedência maior que a versão implantada antes da publicação.
Avalie manifestos de atualização
Determine se um lançamento remoto é atualização, reversão ou compilação equivalente sem deixar os metadados influenciarem.
Valide sequências de pré-lançamento
Teste a ordem de versões alpha, beta, candidatas e finais, rejeitando strings de Semantic Versioning malformadas.
Perguntas frequentes
O que significa o valor de comparação?
A precedência -1 significa que a primeira versão é menor, 0 indica equivalência e 1 significa que a primeira é maior.
Os metadados de compilação afetam o resultado?
Não. Eles são validados, mas o Semantic Versioning os exclui das comparações de precedência.
Um pré-lançamento é inferior ao lançamento final correspondente?
Sim. Com números principal, secundário e de correção idênticos, a versão com identificadores de pré-lançamento tem precedência menor.
Zeros à esquerda são aceitos?
Identificadores numéricos principais, secundários, de correção e de pré-lançamento não podem ter zeros à esquerda, exceto o dígito zero.
Posso incluir uma v inicial ou omitir o número de correção?
Não. As entradas devem ser strings rigorosas de Semantic Versioning 2.0.0, como 1.2.3 ou 1.2.3-rc.1.
Quanto custa?
O executor no navegador está disponível para verificações interativas.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"first_version": "2.1.0-rc.1",
"second_version": "2.1.0"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.semver_compare",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_chars_per_version | 1024 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Entenda a ordem de pré-lançamento e os metadados de compilação
Quando a precedência é igual, greater_version é null porque nenhuma entrada supera a outra.
Use a comparação rigorosa com segurança na automação
Use o executor do navegador para uma verificação interativa ou chame a API por US$ 0,002 quando a comparação fizer parte de um fluxo repetível. Trate invalid_input como falha de qualidade dos dados que deve ser corrigida.