我正在寻找与版本号匹配的正则表达式模式。
我在这里找到的解决方案与我所需要的并不完全匹配。
我需要该模式对单个数字以及后跟数字的数字都有效。
有效数字为
1
1.23
1.2.53.4
无效数字是
01
1.02.3
.1.2
1.2.
-1
任何帮助将不胜感激:)
答案 0 :(得分:2)
考虑:
^[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}$
这个问题也可能是重复的: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",