-1

我正在为我的 shell 脚本程序编写一个正则表达式,它将检查

1) 数字应为 8 位

2) 第一个数字必须从 8 或 9 开始

下面是我所拥有的,但正则表达式似乎没有任何作用

startWithEightOrNineDigitRegex="/^[8-9]/d{8}"
echo "Enter a 8 digit number"
read eightDightNumber
if [[ $eightDightNumber =~ $startWithEightOrNineDigitRegex ]]; then
   echo "Number must start with 8 or 9"
elif [[ $eightDigitNumber -lt 8 ]]
   echo "Number must be in 8 digits "
else
   echo $eightDightNumber
fi

有什么建议么?提前致谢

4

3 回答 3

1

这个正则表达式应该适合你:

^[89][0-9]{7}$
  • 第一部分不需要范围,您可以简单地使用[89]
  • BASH Shell 的正则表达式引擎不支持\d,因此您需要使用字符类[0-9]
于 2013-10-25T07:06:00.677 回答
0

也许您正在寻找:

^[89]\d{7}

您的正则表达式的逻辑是上述逻辑,解决方案是:

^[89][[:digit:]]{7}
于 2013-10-25T07:05:58.273 回答
0

将正则表达式更改为'^[89][0-9]{7}$'.

除此之外,应该调整 if 语句体。

startWithEightOrNineDigitRegex='^[89][0-9]{7}$'
echo "Enter a 8 digit number"
read eightDightNumber
if [[ "$eightDightNumber" =~ $startWithEightOrNineDigitRegex ]] ; then
   echo $eightDightNumber
else
   echo "Number must start with 8 or 9 and should be in 8 digits"
fi

或否定表达式:

startWithEightOrNineDigitRegex='^[89][0-9]{7}$'
echo "Enter a 8 digit number"
read eightDightNumber
if [[ ! "$eightDightNumber" =~ $startWithEightOrNineDigitRegex ]] ; then
   echo "Number must start with 8 or 9 and should be in 8 digits"
else
   echo $eightDightNumber
fi
于 2013-10-25T07:19:19.333 回答