正则表达式模式以匹配有效的版本号

时间:2019-04-09 16:08:32

标签: regex

我正在寻找与版本号匹配的正则表达式模式。

我在这里找到的解决方案与我所需要的并不完全匹配。

我需要该模式对单个数字以及后跟数字的数字都有效。

有效数字为

1
1.23
1.2.53.4

无效数字是

01
1.02.3
.1.2
1.2.
-1

任何帮助将不胜感激:)

3 个答案:

答案 0 :(得分:2)

考虑:

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

打破现状:

  • ^-从字符串的开头开始。
  • [1-9]-恰好是1到9字符之一。
  • \d*-更多数字。
  • (-一些可选的额外内容的开头
  • \.-文字点。
  • [1-9]-恰好是1到9字符之一。
  • \d*-更多数字。
  • )-可选多余内容的结尾。
  • *-可以有任意数量的这些额外的东西。
  • $-在字符串的结尾处结束。

当心

此语法中的某些语法因所使用的正则表达式引擎而异。例如,您使用的是Perl,PHP,Javascript,C#,MySQL ...中的一种吗?

根据我的经验,版本号不符合您描述的简洁格式。

具体来说,您将获得0.3RC512.0-beta62019.04.15-alpha4.53.1stableV6.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}$

这将*的“任意数量的可选附加点和数字”更改为从零到三的范围。因此它将接受11.21.2.31.2.3.4,但不接受1.2.3.4.5

此外,如果您希望零是合法的,但是只有在没有其他数字(例如0.31.0.1)的情况下,它会变得更加复杂:

^(0|[1-9]\d*)(\.(0|[1-9]\d*)){0,3}$

这个问题也可能是重复的:A regex for version number parsing

答案 1 :(得分:0)

此正则表达式应有助于:

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

下面是解释。

[1-9]+\d*表示一个序列,该序列以非零数字开头,后跟零个或多个数字

第一部分(([1-9]+\d*\.)+[1-9]+\d*)捕获了除 1 之外的所有正确示例。因此,我们有一个|(或),后跟一个[1-9]+\d*序列。

答案 2 :(得分:0)

([\*,\^])([\-,\*,\w]+[\.])+(\w)*

npm软件包示例

    "cross-env": "^5.2.0",