0

ユーザー入力を検証しようとしています

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 ヘルプをいただければ幸いです。

4

3 に答える 3

2

2 つの問題:

  • 正規表現を囲む引用符と括弧を失います。それらは正規表現の一部と見なされます。周りの引用符は$operator、このコンテキストでは必要ありませんが、害はありません.
  • -[]のようなもので使用するための、内の特殊文字a-zです。これを回避するには、最初または最後の文字として配置します。

そう:

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

!の中に書くのが慣例だと思います[[ ]]が、どちらでも構いません。

于 2013-01-20T15:03:26.560 に答える
0
if ! [[ "$operator" =~ [-+]?[0-9]* ]] ; then
  ...
  ...
fi
于 2013-01-20T14:56:34.797 に答える
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
于 2013-01-20T17:49:43.147 に答える