如何修改Bash正则规则仅校验点分隔的软件版本号格式?
Bash 点分隔版本号校验规则调整方案
核心适配规则
调整后的校验逻辑会严格匹配以下规则:
- 仅接受英文点
.分隔的多段数字版本号,至少包含2段(适配0.1/0.3.2/0.1.141这类示例格式) - 每段数字禁止前导零,除非该段本身就是单个
0 - 自动拦截单段数字、带正负号、含非法字符的输入
调整后完整代码
if [[ $1 =~ ^([1-9][0-9]*|0)(\.([1-9][0-9]*|0))+$ ]]; then echo 'version is good' exit 0 else exit 1 fi
正则逻辑说明
正则^([1-9][0-9]*|0)(\.([1-9][0-9]*|0))+$各部分含义:
^匹配字符串开头([1-9][0-9]*|0)匹配版本号的第一段:要么是单个0,要么是1-9开头后面跟任意数字(避免前导零)(\.([1-9][0-9]*|0))+匹配至少1组「点+合法数字段」,保证版本号至少有2段,且后续每段也符合前导零校验规则$匹配字符串结尾,避免多余后缀字符
测试效果参考
| 输入值 | 校验结果 |
|---|---|
| 0.1 | 合法 |
| 0.3.2 | 合法 |
| 0.1.141 | 合法 |
| 1 | 非法(单段) |
| 01 | 非法(单段+前导零) |
| 1.02 | 非法(第二段前导零) |
| 0. | 非法(末尾带点) |
| +1.2 | 非法(带正负号) |
内容的提问来源于stack exchange,提问作者PythonicExperience
相关产品推荐
相关产品推荐

