You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用egrep过滤版本号:拒绝大写字符及非法格式?

修复版本号合法性校验的egrep脚本问题

合法版本号格式

以下为合法的版本号示例:

11.22.33
11.22.33-alpha
11.22.33-beta
11.22.33-beta2

校验规则

  • 拒绝包含大写字符的版本(如 11.22.33-ALPHA)
  • 拒绝存在多个连字符的版本(如 11.22.33-alpha-1)
  • 必须使用 egrep 进行校验

原代码及问题

原Bash代码如下:

version=11.22.33-BETA
result=$(echo $version | egrep "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+(-[0-9a-z]+)?"); echo $result

if [[ -z $result ]]; then
   echo "BAD version!!!"
else
   echo "Good version."
fi

问题:当version为11.22.33-BETA时,egrep会匹配到字符串中的11.22.33部分,导致result不为空,但该版本包含大写字符属于非法版本,脚本却错误输出Good version.(注:原描述中输出BAD version!!!存在笔误,实际原代码会输出合法判定)

修改方案

给正则表达式添加行首锚定^和行尾锚定$,确保整个字符串完全匹配规则,而非部分匹配。修改后的代码如下:

version=11.22.33-BETA
result=$(echo "$version" | egrep "^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+(-[0-9a-z]+)?$"); echo $result

if [[ -z $result ]]; then
   echo "BAD version!!!"
else
   echo "Good version."
fi

修改说明

  • ^:匹配字符串的起始位置
  • $:匹配字符串的结束位置
    添加锚定后,只有当版本号完全符合主版本号.次版本号.修订版本号(-小写字母数字后缀)?的完整格式时,才会被判定为合法,彻底避免了部分匹配导致的误判。

内容的提问来源于stack exchange,提问作者CodingFrog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 08:10:26