在Bash Scripting中进行分组的正则表达式验证

时间:2015-07-30 13:56:25

标签: regex bash

我尝试为Bash创建一个正则表达式验证,并且已经这样做了。它只适用于第一个数字,第二个数字没有。你能帮帮我吗?

while [[ $usrInput =~ [^[1-9]|[0-2]{1}$] ]]
do
        echo "This is not a valid option. Please type an integer between 1 and 12"
        read usrInput
done

2 个答案:

答案 0 :(得分:0)

您无法嵌套范围。你想要像

这样的东西
while ! [[ $usrInput =~ ^[0-9]|11|12$ ]]; do

尽管通常以数字方式比较数字字符串会更简单:

min=1
max=12
until [[ $usrInput =~ ^[0-9]+$ ]] &&
      (( usrInput >= min && usrInput <= max )); do

答案 1 :(得分:0)

我相信你(或bash)没有正确地对表达式进行分组。无论哪种方式,这都可行:

while read usrInput
do
  if [[ "$usrInput" =~ ^([1-9]|1[0-2])$ ]]
  then
      break
  else
    echo "Number not between 1 and 12"
  fi
done