Шаблон регулярного выражения для соответствия действительным номерам версий - PullRequest
0 голосов
/ 09 апреля 2019

Я ищу шаблон регулярного выражения, который бы соответствовал номеру версии.

Решения, которые я нашел здесь, на самом деле не соответствуют тому, что мне нужно.

Мне нужен шаблон, чтобыдопустимо для отдельных чисел, а также для чисел, за которыми следует.

Допустимые числа:

1
1.23
1.2.53.4

Недопустимые числа:

01
1.02.3
.1.2
1.2.
-1

Любая помощь приветствуется:)

Ответы [ 2 ]

2 голосов
/ 09 апреля 2019

Рассмотрим:

^[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}$

Этот вопрос также может быть повторен: Регулярное выражение для разбора номера версии

0 голосов
/ 09 апреля 2019

Это регулярное выражение должно помочь:

^(([1-9]+\d*\.)+[1-9]+\d*)|[1-9]+\d*$

Ниже приведено объяснение.

[1-9]+\d* означает последовательность, которая начинается с ненулевого числа, после чего следуетна ноль или более чисел

Первая часть (([1-9]+\d*\.)+[1-9]+\d*) перехватывает все ваши правильные примеры, кроме 1 .Итак, у нас есть | (или), за которым следует последовательность [1-9]+\d*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...