Analisador SemVer
Separe uma versão como 1.2.3-alpha.1+build.7 em major 1, minor 2, patch 3, prerelease alpha.1 e build build.7, conferida com rigor pelo SemVer 2.0.0. Uma tag malformada é recusada com a regra que ela quebra. 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
- Texto
- 1.2.3-alpha.1+build.7
- Versão
- 1.2.3-alpha.1+build.7
- Principal
- 1
- Secundária
- 2
- Patch
- 3
Uma versão não é só três números: identificadores opcionais de prerelease ligados por hífen e metadados de build com prefixo mais mudam como um lançamento é rotulado e comparado. Este analisador de versão SemVer aceita uma única cadeia, valida de forma estrita contra a especificação oficial SemVer 2.0.0 e devolve os componentes numéricos major, minor e patch junto com quaisquer identificadores de prerelease e de build.
O que SemVer 2.0.0 realmente permite
O versionamento semântico 2.0.0 define uma versão como MAJOR.MINOR.PATCH, três inteiros não negativos unidos por pontos, com identificadores opcionais de prerelease ligados por um hífen e metadados opcionais de build com prefixo mais. Cada um de major, minor e patch é um identificador numérico: ou um zero sozinho, ou um dígito de um a nove seguido de mais dígitos, de modo que 1.0.0 é válido e 01.0.0 não é.
Uma versão de prerelease é o núcleo seguido de um hífen e um ou mais identificadores separados por pontos, como alpha, rc.1 ou 0.3.4. Um identificador de prerelease é ou um identificador numérico com a mesma regra de sem zeros à esquerda, ou um identificador alfanumérico que contém ao menos uma letra ou um hífen e, no restante, só letras ASCII, dígitos e hífens.
Os metadados de build vêm depois de um sinal de mais e usam o mesmo alfabeto de identificadores, exceto que identificadores de build só com dígitos podem manter zeros à esquerda, então 1.0.0+001 é legal. Identificadores vazios, pontos consecutivos, um hífen ou um mais no fim, um v inicial, versões de duas partes como 1.2 e letras não ASCII são ilegais.
Este analisador implementa essa gramática como um varredor da esquerda para a direita, não como uma expressão regular permissiva, de modo que uma falha nomeia a regra quebrada em vez de devolver um objeto pela metade. A ordem de comparação fica fora do escopo: a capacidade analisa e valida, não classifica duas versões uma contra a outra.
Onde um analisador SemVer realmente vale a pena
Registros de pacotes, bots de publicação e geradores de changelog precisam de um único lugar que responda se uma tag é uma versão SemVer legal e quais são as cinco partes. Um job de integração contínua que recusa publicar quando a tag git é v1.2.3 em vez de 1.2.3, ou quando alguém digitou só 1.2, evita um lançamento quebrado antes de chegar a um registro.
Scanners de dependências que leem lockfiles querem campos estruturados major, minor, patch e prerelease sem puxar um runtime semver específico de uma linguagem para um worker de borda. Quem ensina versionamento quer uma landing dedicada que explique zeros à esquerda e metadados de build, em vez de enterrar o tema sob um divisor de cadeias genérico. Validação falha não consome saldo.
Mantenha as cadeias abaixo do limite de comprimento documentado, fixe os campos estruturados nos testes e você obtém componentes reproduzíveis para ferramentas de release, plugins de aprendizagem e workers de borda sem montar uma biblioteca semver própria de uma linguagem.
Casos de uso
Validar tags git antes do release
Recuse um job de publicação quando a tag for v1.2.3, 1.2 ou 01.0.0 em vez de uma versão SemVer 2.0.0 legal.
Separar versões de um lockfile ou SBOM
Transforme cada versão de dependência em campos major, minor, patch, prerelease e build para scanners e painéis.
Perguntas frequentes
O que é uma cadeia de versão SemVer 2.0.0 válida?
MAJOR.MINOR.PATCH com -prerelease e +build opcionais, só letras ASCII, dígitos e hífens. Exemplo: 1.2.3-alpha.1+build.7. Versões de duas partes e um v inicial não são válidos.
O analisador aceita um v inicial, como v1.2.3?
Não. SemVer 2.0.0 não permite um prefixo v. Envie 1.2.3.
Por que 01.0.0 é recusado?
Identificadores numéricos não podem ter zeros à esquerda. 0 é permitido como identificador inteiro (0.1.0), mas 01 não. A mesma regra vale para identificadores numéricos de prerelease como 01 em 1.0.0-01.
Como prerelease e build voltam quando estão ausentes?
Essas chaves são omitidas, nunca definidas como null.
Metadados de build podem ter zeros à esquerda?
Sim. Depois do sinal de mais, um identificador de build só com dígitos pode manter zeros à esquerda, então 1.0.0+001 é válido. Major, minor, patch e identificadores numéricos de prerelease não podem.
Ele diz qual de duas versões é mais nova?
Não. Ele analisa e valida uma versão de cada vez e não ordena versões entre si. Se você precisa ordenar ou comparar, use nas suas próprias ferramentas as partes estruturadas que ele devolve.
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/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)Exemplo de requisição
{
"text": "1.2.3-alpha.1+build.7"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.semver_parse",
"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 | 256 |
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
O versionamento semântico (SemVer 2.0.0) é a gramática de versões usada por pacotes npm, crates Rust, módulos Go e a maioria das API públicas. Prefixos v iniciais, números de patch ausentes, zeros à esquerda em identificadores numéricos, identificadores vazios e caracteres não ASCII são recusados com invalid_input em vez de reescritos em silêncio.
Contrato de entrada, forma da resposta e erros
Espaços em volta são recortados; a cadeia restante precisa ser uma versão SemVer 2.0.0 completa. Não envie um v inicial, um operador de intervalo nem um atalho de duas partes. Envie um corpo JSON com o campo de cadeia obrigatório text (aliases version, semver, value). Em sucesso o corpo ecoa version como a entrada recortada, major, minor e patch como inteiros seguros, core como a substring MAJOR.MINOR.PATCH, e is_prerelease como booleano. Quando há uma seção de prerelease, prerelease é a cadeia de identificadores sem o hífen inicial e prerelease_identifiers é o array partido; as duas chaves são omitidas se não houver prerelease. Quando há metadados de build, build e build_identifiers aparecem do mesmo jeito e são omitidos no caso contrário, então os clientes nunca veem null. Exemplo: 1.2.3-alpha.1+build.7 produz major 1, minor 2, patch 3, prerelease alpha.1, build build.7 e is_prerelease true. Falta de text, cadeia vazia, texto com mais de duzentos e cinquenta e seis caracteres, um número no lugar de uma cadeia, zeros à esquerda em major, minor, patch ou um identificador numérico de prerelease, caracteres ilegais, caracteres sobrando depois da versão e um v inicial falham com invalid_input e uma mensagem em inglês que nomeia o campo ou a regra quebrada. Essas falhas não são cobradas. O preço da API em sucesso é a base publicada de US$ 0,002 por item.
Onde um analisador SemVer realmente vale a pena
Como a implementação é parse puro de nível A, cada chamada bem-sucedida custa o preço-base publicado US$ 0,002 sem tokens de modelo e sem rede de saída.
Casos de integração
Ensinar a gramática SemVer
Mostre aos alunos quais cadeias a especificação aceita e quais recusa, com as mesmas regras que a API aplica.
Perguntas técnicas
Quanto custa o analisador de versão SemVer?
A ferramenta do navegador é gratuita. Pedidos à API usam saldo pré-pago KIT a US$ 0,002 por chamada bem-sucedida; entrada inválida não é cobrada.