Analyseur SemVer
Découpez une version comme 1.2.3-alpha.1+build.7 en major 1, minor 2, patch 3, prerelease alpha.1 et build build.7, vérifiée strictement selon SemVer 2.0.0. Une étiquette mal formée est refusée avec la règle qu'elle enfreint. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Texte
- 1.2.3-alpha.1+build.7
- Version
- 1.2.3-alpha.1+build.7
- Majeure
- 1
- Mineure
- 2
- Correctif (patch)
- 3
Une version n'est pas seulement trois nombres : les identifiants facultatifs de prerelease reliés par des tirets et les métadonnées de build préfixées d'un plus changent l'étiquetage et la comparaison d'une publication. Cet analyseur de version SemVer accepte une seule chaîne, la valide strictement contre la spécification officielle SemVer 2.0.0 et renvoie les composantes numériques major, minor et patch ainsi que tout identifiant de prerelease et de build.
Ce que SemVer 2.0.0 autorise vraiment
Le versionnage sémantique 2.0.0 définit une version comme MAJOR.MINOR.PATCH, trois entiers non négatifs joints par des points, avec des identifiants facultatifs de prerelease après un tiret et des métadonnées facultatives de build après un plus. Chacun de major, minor et patch est un identifiant numérique : soit un zéro isolé, soit un chiffre de un à neuf suivi d'autres chiffres, donc 1.0.0 est valide et 01.0.0 ne l'est pas.
Une version de prerelease est le noyau suivi d'un tiret et d'un ou plusieurs identifiants séparés par des points, comme alpha, rc.1 ou 0.3.4. Un identifiant de prerelease est soit un identifiant numérique avec la même règle d'absence de zéros en tête, soit un identifiant alphanumérique qui contient au moins une lettre ou un tiret et, pour le reste, uniquement des lettres ASCII, des chiffres et des tirets.
Les métadonnées de build suivent un signe plus et utilisent le même alphabet d'identifiants, sauf que les identifiants de build uniquement numériques peuvent garder des zéros en tête, donc 1.0.0+001 est licite. Les identifiants vides, les points consécutifs, un tiret ou un plus final, un v initial, les versions à deux parties comme 1.2 et les lettres non ASCII sont illicites.
Cet analyseur implémente cette grammaire comme un scanneur de gauche à droite, non comme une expression régulière permissive, afin qu'un échec nomme la règle rompue au lieu de renvoyer un objet à moitié parsé. L'ordre de comparaison est hors périmètre : la capacité analyse et valide, elle ne classe pas deux versions l'une par rapport à l'autre.
Où un analyseur SemVer justifie vraiment son usage
Les registres de paquets, les robots de publication et les générateurs de changelog ont besoin d'un seul endroit qui dise si une étiquette est une version SemVer licite et quelles sont ses cinq parties. Un travail d'intégration continue qui refuse de publier lorsque l'étiquette git est v1.2.3 au lieu de 1.2.3, ou lorsque quelqu'un n'a tapé que 1.2, évite une publication cassée avant qu'elle n'atteigne un registre.
Les scanneurs de dépendances qui lisent des lockfiles veulent des champs structurés major, minor, patch et prerelease sans tirer un moteur semver propre à un langage dans un worker de bord. Qui enseigne le versionnage veut une page dédiée qui explique les zéros en tête et les métadonnées de build, plutôt que d'enterrer le sujet sous un simple coupeur de chaînes. Une validation échouée ne consomme pas le solde.
Gardez les chaînes sous la limite de longueur documentée, figez les champs structurés dans les tests, et vous obtenez des composantes reproductibles pour les outils de publication, les greffons d'apprentissage et les workers de bord, sans dresser une bibliothèque semver propre à un langage.
Cas d’usage
Valider les étiquettes git avant une publication
Refusez un travail de publication lorsque l'étiquette est v1.2.3, 1.2 ou 01.0.0 au lieu d'une version SemVer 2.0.0 licite.
Découper les versions d'un lockfile ou d'un SBOM
Transformez chaque version de dépendance en champs major, minor, patch, prerelease et build pour les scanneurs et les tableaux de bord.
Questions fréquentes
Quelle chaîne de version SemVer 2.0.0 est valide ?
MAJOR.MINOR.PATCH avec -prerelease et +build facultatifs, uniquement lettres ASCII, chiffres et tirets. Exemple : 1.2.3-alpha.1+build.7. Les versions à deux parties et un v initial ne sont pas valides.
L'analyseur accepte-t-il un v initial, comme v1.2.3 ?
Non. SemVer 2.0.0 n'autorise pas un préfixe v. Envoyez 1.2.3.
Pourquoi 01.0.0 est-il rejeté ?
Les identifiants numériques ne doivent pas avoir de zéros en tête. 0 est autorisé comme identifiant entier (0.1.0), mais 01 ne l'est pas. La même règle s'applique aux identifiants numériques de prerelease tels que 01 dans 1.0.0-01.
Comment prerelease et build reviennent-ils lorsqu'ils sont absents ?
Ces clés sont omises, jamais mises à null.
Les métadonnées de build peuvent-elles garder des zéros en tête ?
Oui. Après le signe plus, un identifiant de build composé uniquement de chiffres peut garder ses zéros en tête : 1.0.0+001 est donc valide. Major, minor, patch et les identifiants numériques de prerelease ne le peuvent pas.
Indique-t-il laquelle de deux versions est la plus récente ?
Non. Il analyse et valide une version à la fois, sans classer les versions entre elles. Pour trier ou comparer, utilisez dans vos propres outils les parties structurées qu'il renvoie.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre 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)Exemple de requête
{
"text": "1.2.3-alpha.1+build.7"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.semver_parse",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_chars | 256 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Le versionnage sémantique (SemVer 2.0.0) est la grammaire de versions utilisée par les paquets npm, les crates Rust, les modules Go et la plupart des API publiques. Les préfixes v initiaux, les numéros de patch manquants, les zéros en tête des identifiants numériques, les identifiants vides et les caractères non ASCII sont rejetés avec invalid_input plutôt que réécrits en silence.
Contrat d'entrée, forme de la réponse et erreurs
Les espaces autour sont retirés ; la chaîne restante doit être une version SemVer 2.0.0 complète. N'envoyez ni un v initial, ni un opérateur d'intervalle, ni un raccourci à deux parties. Envoyez un corps JSON avec le champ chaîne obligatoire text (alias version, semver, value). En cas de succès le corps répète version comme l'entrée rognée, major, minor et patch comme entiers sûrs, core comme la sous-chaîne MAJOR.MINOR.PATCH, et is_prerelease comme booléen. Lorsqu'une section prerelease est présente, prerelease est la chaîne d'identifiants sans le tiret initial et prerelease_identifiers est le tableau scindé ; les deux clés sont omises s'il n'y a pas de prerelease. Lorsque des métadonnées de build sont présentes, build et build_identifiers apparaissent de la même façon et sont omis sinon, ainsi les clients ne voient jamais null. Exemple : 1.2.3-alpha.1+build.7 donne major 1, minor 2, patch 3, prerelease alpha.1, build build.7 et is_prerelease true. Un text manquant, une chaîne vide, un texte de plus de deux cent cinquante-six caractères, un nombre à la place d'une chaîne, des zéros en tête sur major, minor, patch ou un identifiant numérique de prerelease, des caractères illicites, des caractères restants après la version et un v initial échouent avec invalid_input et un message en anglais qui nomme le champ ou la règle rompue. Ces échecs ne sont pas facturés. Le tarif API en succès est la base publiée de $0.002 par élément.
Où un analyseur SemVer justifie vraiment son usage
Comme l'implémentation est un parse pur de niveau A, chaque appel réussi coûte le tarif de base publié $0.002 sans jetons de modèle ni réseau sortant.
Cas d'intégration
Enseigner la grammaire SemVer
Montrez aux élèves quelles chaînes la spécification accepte et lesquelles elle refuse, avec les mêmes règles que l'API.
Questions techniques
Combien coûte l'analyseur de version SemVer ?
L'outil du navigateur est gratuit. Les requêtes API utilisent le solde prépayé KIT à $0.002 par appel réussi ; une entrée invalide n'est pas facturée.