为Go版本验证脚本添加预发布版本格式支持
Go版本标签正则验证方案
你没贴出自己写的组合正则,不过我可以给你适配需求的正则表达式,同时兼容标准版本和预发布版本,且符合语义化版本的预发布规范。
推荐的正则表达式
^v\d+\.\d+\.\d+(-[0-9A-Za-z-]+)?$
正则细节拆解
^v:强制版本标签以小写字母v开头\d+\.\d+\.\d+:匹配主版本号.次版本号.修订号的核心结构,确保三个部分都是纯数字(-[0-9A-Za-z-]+)?:可选的预发布后缀:- 以
-作为分隔符 - 后缀内容允许数字、大小写字母和连字符
?表示这部分可以不存在,完美兼容标准版本(如v1.2.3)
- 以
Go语言实战示例
给你一个完整的校验函数,直接就能用:
package main import ( "fmt" "regexp" ) // 预编译正则,提升多次校验的性能 var validVersionPattern = regexp.MustCompile(`^v\d+\.\d+\.\d+(-[0-9A-Za-z-]+)?$`) func IsValidVersionTag(tag string) bool { return validVersionPattern.MatchString(tag) } func main() { testTags := []string{ "v1.2.3", // 标准版本 ✅ "v1.2.3-test", // 预发布版本 ✅ "v1.2.4-beta", // 预发布版本 ✅ "v1.2", // 缺少修订号 ❌ "1.2.3", // 缺少前缀v ❌ "v1.2.3_abc", // 用下划线代替连字符 ❌ } for _, tag := range testTags { fmt.Printf("标签 %q 校验结果:%t\n", tag, IsValidVersionTag(tag)) } }
扩展优化建议
- 如果需要支持带点的预发布版本(比如
v1.2.3-beta.1),把正则调整为:
新增的^v\d+\.\d+\.\d+(-[0-9A-Za-z-.]+)?$.允许预发布部分包含层级标识 - 若要兼容大写
V开头的标签,把^v改成^[vV] - 实际项目中,建议把正则预编译成全局变量(如示例中的
validVersionPattern),避免每次校验都重新编译,提升性能
内容的提问来源于stack exchange,提问作者Nysa-522
相关产品推荐
相关产品推荐

