匹配SemVer语义化版本的正确正则表达式是什么?
语义化版本(SemVer)匹配正则
以下正则严格遵循SemVer规范,可完全满足给出的正反例匹配要求:
^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
核心校验逻辑
- 主版本、次版本、修订号三个核心段为必填项,取值只能是
0或者非零开头的纯数字,禁止01这类带前导零的格式,可直接拦截01.1.1类错误 - 预发布段为可选内容,拼接在核心段后,以横杠开头、到加号(如有)或字符串末尾结束,内部由点分隔的多个标识符组成:纯数字类型的标识符不允许带前导零,所有标识符仅支持字母、数字、横杠三类字符,可拦截
1.2.3-0123(预发布数字段带前导零)、1.0.0-alpha_beta(含非法下划线)类错误 - 构建元数据段为可选内容,拼接在加号后,内部由点分隔的多个标识符组成,仅支持字母、数字、横杠三类字符,整段仅允许出现一个加号,可拦截
9.8.7-whatever+meta+meta(存在多个加号)类错误 - 整体结构必须以三段核心版本号为基础,缺失核心段、多冗余版本段、点分隔符间出现空标识符的格式都会被拦截,可过滤
1.2-SNAPSHOT(缺失修订号段)、1.2.3.DEV(冗余版本段)、1.2.31.2.3----RC-SNAPSHOT.12.09.1--..12+788(核心段数量错误、预发布段含前导零数字、连续点导致空标识符)类错误
匹配效果
列出的所有合法版本号(包括带多横杠预发布标识、带构建元数据的特殊格式版本)均可被完整匹配,所有列出的非法示例均不会被误匹配。
内容的提问来源于stack exchange,提问作者karlsebal
相关产品推荐
相关产品推荐

