2013-01-20 40 views
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的幫助將不勝感激!

+1

你想接受的數字,作爲註釋,輸出暗示,或運營商,如正則表達式的暗示? – Thomas

回答

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

兩個問題:

  • 失去周圍的正則表達式的報價和括號;他們被認爲是正則表達式的一部分。各地$operator的引號也不在這方面需要的,但他們沒有壞處。
  • -是內[]特殊字符,在使用的東西像a-z。把它作爲第一個或最後一個字符來解決這個問題。

所以:

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

我認爲這是習慣性地寫![[ ]]裏面,但無論是作品。

+0

的!外面的[[]]否定否定裏面他們如一切! [[-d文件|| -r文件]是[不同! -d文件|| -r文件]] – peteches

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