Regex pour version sémantique (semver)

Utilisez /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?$/ pour vérifier qu’une chaîne entière correspond à une version sémantique (semver) valide. Chaque exemple ci-dessous a été testé avec ce motif, et vous pouvez l’ouvrir dans le testeur de regex avec les exemples préchargés.

Mis à jour le

/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?$/
Ouvrir dans le testeur de regex
EntréeRésultatGroupes
1.0.0✓ Correspond1 0 0
2.10.3-beta.1✓ Correspond2 10 3 beta.1
1.0.0+build.5✓ Correspond1 0 0 build.5
0.1.0-rc.1+sha.5114f85✓ Correspond0 1 0 rc.1 sha.5114f85
1.0✗ Aucune correspondance
01.0.0✗ Aucune correspondance
v1.0.0✗ Aucune correspondance
1.0.0-✗ Aucune correspondance

Fonctionnement du motif

ÉlémentSignification
(0|[1-9]\d*)Majeur, mineur et correctif (groupes 1 à 3) : nombres sans zéro en tête
\.Points entre ces nombres
(?:-([0-9A-Za-z.-]+))?Préversion facultative après un tiret (groupe 4) : beta.1, rc.2
(?:\+([0-9A-Za-z.-]+))?Métadonnées de build facultatives après un plus (groupe 5)

Exemples de code

JavaScript

const re = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?$/;
re.test(value); // true or false

Python

import re

bool(re.fullmatch(r'(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?', value))

PHP

preg_match('/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?$/', $value) === 1;

Remarques et limites

Une version pratique des règles de semver 2.0 ; retirez d’abord un v initial si vos tags en utilisent un. Comparez les versions nombre par nombre, groupe par groupe, et non comme des chaînes de caractères.

Questions fréquentes

Quelle est la regex pour la version sémantique (semver) ?
/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?$/ — elle correspond à la chaîne entière. Consultez le tableau ci-dessus pour le rôle de chaque élément.
Quels exemples correspondent ?
Parmi les exemples testés, ceux-ci correspondent : 1.0.0, 2.10.3-beta.1, 1.0.0+build.5, 0.1.0-rc.1+sha.5114f85. Les autres ne correspondent pas.
Comment tester cette regex ?
Cliquez sur « Ouvrir dans le testeur de regex » : le motif, les drapeaux et le texte d’exemple se chargent automatiquement, et les correspondances s’affichent en surbrillance pendant que vous modifiez.