Регулярное выражение для semver

Используйте /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?$/, чтобы проверить, что вся строка является корректной семантической версией (semver). Каждый пример ниже проверен по этому шаблону. Открыть его в Regex Tester можно с уже загруженными образцами.

Обновлено

/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?$/
Открыть в Regex Tester
ВводРезультатГруппы
1.0.0✓ Совпадение1 0 0
2.10.3-beta.1✓ Совпадение2 10 3 beta.1
1.0.0+build.5✓ Совпадение1 0 0 build.5
0.1.0-rc.1+sha.5114f85✓ Совпадение0 1 0 rc.1 sha.5114f85
1.0✗ Нет совпадения
01.0.0✗ Нет совпадения
v1.0.0✗ Нет совпадения
1.0.0-✗ Нет совпадения

Как работает шаблон

ЧастьЗначение
(0|[1-9]\d*)Мажорная, минорная и патч-версии (группы 1–3): числа без ведущих нулей
\.Точки между ними
(?:-([0-9A-Za-z.-]+))?Необязательная предрелизная метка после дефиса (группа 4): beta.1, rc.2
(?:\+([0-9A-Za-z.-]+))?Необязательные метаданные сборки после плюса (группа 5)

Примеры кода

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;

Примечания и ограничения

Практическая реализация правил semver 2.0. Если в ваших тегах используется префикс v, сначала удалите его. Сравнивайте версии численно, группа за группой, а не как строки.

Часто задаваемые вопросы

Какое регулярное выражение для semver?
/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?$/ — оно проверяет всю строку целиком. Что делает каждая часть, см. таблицу выше.
Какие примеры подходят?
Из проверенных примеров подходят: 1.0.0, 2.10.3-beta.1, 1.0.0+build.5, 0.1.0-rc.1+sha.5114f85. Остальные не подходят.
Как протестировать это регулярное выражение?
Нажмите «Открыть в Regex Tester»: шаблон, флаги и примеры текста загрузятся автоматически, а совпадения будут подсвечиваться по мере редактирования.