Рассмотрим:
^[1-9]\d*(\.[1-9]\d*)*$
Разбить это:
^
- Начало в начале строки.
[1-9]
- Точно один из символов от 1 до 9.
\d*
- Больше цифр.
(
- Начало некоторых дополнительных дополнительных вещей
\.
- Буквальная точка.
[1-9]
- Точно один из символов от 1 до 9.
\d*
- Больше цифр.
)
- Конец необязательного дополнительного материала.
*
- может быть любое количество этих дополнительных материалов.
$
- И заканчивается в конце строки.
Осторожно
Часть этого синтаксиса отличается в зависимости от того, какой движок регулярных выражений вы используете. Например, вы используете один из Perl, PHP, Javascript, C #, MySQL ...?
По моему опыту, номера версий не соответствуют аккуратному формату, который вы описали.
В частности, вы получаете значения, такие как 0.3RC5
, 12.0-beta6
, 2019.04.15-alpha4.5
, 3.1stable
, V6.8pl7
и другие.
Если вы проверяете существующие данные, убедитесь, что ваши критерии соответствуют описанным вами условиям. В частности, если вы следуете «Семантическому версионированию», имейте в виду, что версии, которые являются нулями, являются законными, поэтому 1.0.1, что «Дополнительные метки для предварительного выпуска и метаданных сборки доступны как расширения для формата MAJOR.MINOR.PATCH. . ", и что" 1 "не является допустимым номером версии.
Имейте в виду, что приведенное выше также будет соответствовать тупо длинным номерам версий, таким как 1.2.3.4.5.6.7.8.9.10.11.12.13.14
. Чтобы предотвратить это, вы можете ограничить это следующим образом:
^[1-9]\d*(\.[1-9]\d*){0,3}$
Изменяет *
для «любого количества дополнительных точек и цифр» на диапазон от нуля до трех. Таким образом, он будет принимать 1
, 1.2
, 1.2.3
и 1.2.3.4
, но не 1.2.3.4.5
.
Кроме того, если вы хотите, чтобы нули были допустимыми, но только при отсутствии других чисел (например, 0.3
, 1.0.1
), то это становится немного сложнее:
^(0|[1-9]\d*)(\.(0|[1-9]\d*)){0,3}$
Этот вопрос также может быть повторен: Регулярное выражение для разбора номера версии