2017-02-01 4 views
0
price="1.11" 
case $price in 
      ''|*[!0-9]*) echo "It is not an integer."; 
      ;; 
     esac 

Output: It is not an integerです。bashは、小数点を含む正の整数または正の整数のみを許可します。

上記のコードでは、正の整数のみを検証できます。

小数点を含む正の整数はどのように使用できますか?無駄

+0

'は!'、実際にそれが* *整数ではないことを意味します。 – chepner

+0

おそらく重複するhttp://stackoverflow.com/questions/41970586/regex-start-of-string-anchor-not-working –

+1

「小数点を含む整数」と言うときは、任意に整数が続きます停止するか、実際には「浮動小数点数」を意味しますか? – tripleee

答えて

1

はトリッキーである。この正規表現を試しにインターネットを介して検索されています。現在のパターンはと一致しません。 -integers。二bashの拡張機能は、これはかなり簡単に:

  1. 使用延長パターン

    shopt -s extglob 
    case $price in 
        # +([0-9]) - match one or more integer digits 
        # ?(.+([0-9])) - match an optional dot followed by zero or more digits 
        +([0-9]))?(.*([0-9]))) echo "It is an integer" ;; 
        *) echo "Not an integer" 
    esac 
    
  2. 使用

if [[ $price =~ ^[0-9]+(.?[0-9]*)$ ]]; then 
    echo "It is an integer" 
else 
    echo "Not an integer" 
fi 
は(理論的には、あなたが使用することができるはずの正規表現正規表現マッチングを行うPOSIXコマンド expr;私は問題を解決していますそれを動作させるには、POSIXの互換性を要件として指定していないので、私はそれについて心配するつもりはありません。 POSIXパターンマッチングは数字の任意の長さの文字列を一致させるのに十分強力ではありません)


あなただけの「decimalized」整数ではなく、任意の浮動小数点値を一致させたい場合は、それはもちろん簡単です:。

  1. 拡張パターン+([0-9])?(.)
  2. 正規表現[0-9]+\.?
+0

小数点の後に任意の数字があるかどうかチェックしているようですが、もちろん数字ではありません。 – tripleee

+0

例えば、 '6'に加えて' 6.'だけ一致するのでしょうか? – chepner

+0

ありがとうございます。しかし、追加すると、数値が正の値かどうかを確認するにはどうすればよいですか?[[$ price =〜[しかし、失敗しました:( – Justpee

-1

POSIX互換の方法でこれを行う^(0*[1-9][0-9]*(\.[0-9]+)?|0+\.[0-9]*[1-9][0-9]*)$

+1

これは 'bash'' case'文のコンテキストでテストしましたか? – shellter

+0

ありがとうございます。予期しないトークンの近くに文法エラーがあるようです。 '( ' – Justpee

関連する問題