正则表达式和输入验证Bash

时间:2013-01-20 14:43:38

标签: regex bash

我正在尝试验证用户输入

if ! [[ "$operator" =~ ("[+-/*]") ]] ; then     # validate user input to include decimals
        exec >&2; echo "error: Not a valid number, please try again";
        echo
else
        break
        echo
fi

尝试了多种组合而不工作? Ypu帮助将不胜感激!

3 个答案:

答案 0 :(得分:2)

两个问题:

  • 丢失正则表达式周围的引号和括号;他们被认为是正则表达式的一部分。在这种情况下,不需要$operator左右的引号,尽管它们没有任何危害。
  • -[]中的特殊字符,用于a-z之类的内容。把它作为第一个或最后一个角色来解决这个问题。

所以:

if ! [[ $operator =~ [-+/*] ]] ; then

我认为习惯性地在!内写[[ ]],但要么有效。

答案 1 :(得分:0)

if ! [[ "$operator" =~ [-+]?[0-9]* ]] ; then
  ...
  ...
fi

答案 2 :(得分:0)

sgeorge-mn:~ sgeorge$ cat validate.sh 
OPERATOR=$1
REGEX='[+*-/]';
if ! [[ $OPERATOR =~ $REGEX ]]; then
        echo "Not valid input"
else
        echo "Valid input"
fi

sgeorge-mn:~ sgeorge$ bash validate.sh '-'
Valid input

sgeorge-mn:~ sgeorge$ bash validate.sh '*'
Valid input

sgeorge-mn:~ sgeorge$ bash validate.sh '/'
Valid input

sgeorge-mn:~ sgeorge$ bash validate.sh '+'
Valid input

sgeorge-mn:~ sgeorge$ bash validate.sh 's'
Not valid input

sgeorge-mn:~ sgeorge$ bash validate.sh '132'
Not valid input