首页 > 解决方案 > 如何使用正则表达式验证内部版本号

问题描述

我有一个 DGTS_2.11.2311231231 格式的内部版本号,如果格式不匹配,我想验证输入并退出,我试图创建这样的东西,但它不起作用,请帮助我

version=$1
version_checked=$(echo $version | sed -e 'DGTS_\/[0-9]\+\.[0-9]{1,2}\+\.[0-9]{1,10}/d')
version_checked=DGTS_*
if [[ -z $version_checked ]]; then
echo "$version is the right format"
else
 echo "$version_checked is not  in the right format, please use XX.XX.XX format (ie: DGTS_2.10.3)"
exit

如果输入格式不正确,此代码段未验证

标签: regexbash

解决方案


我假设前两个数字区域可以是一位或两位数字,而最后一个数字区域在 1-10 范围内。您的程序逻辑和语法存在一些不适用于我删除的正则表达式本身的问题:

#!/bin/bash

version=$1

if [[ $version =~ ^DGTS_([0-9]{1,2}\.){2}[0-9]{1,10}$ ]]; then
  echo "$version is the right format"
else
  echo "$version is not in the right format, please use XX.XX.XX format (ie: DGTS_2.10.3)"
  exit
fi

根据您的要求,这是一个与可选的第四象限一起使用并允许DGTS_2.11.0.4661505通过的正则表达式:

^DGTS_([0-9]{1,2}\.){2}[0-9]{1,10}(\.[0-9]{1,10})?$

推荐阅读