正規表現 - 許可される文字を検証するスクリプト

正規表現 - 許可される文字を検証するスクリプト

文字列を調べて、指定された文字リスト以外の文字が含まれていないことを確認する必要があります。

私はこれをテストするためにスクリプトを書いた。

str="$1"

regex="^[0-9a-zA-Z\,\!\-\^\`@\{\}\[\],=\(\).;\/~_|]*$"

if [[ "$str" =~ $regex ]]
then
  echo "f yeah"
else
  echo "f you"
fi

しかし、これはうまくいかないようです。私の考えにはまだ遠かったと思います。

許可される文字のリストは次のとおりです。

a-z A-Z 0-9 ` @ { } [ ] ^ , = ! ( ) . ; / ~ _ |

私がここで何を見逃しているのかよくわかりません。

答え1

]aはバックスラッシュを介して文字クラスに含めることはできません。クラスの最初の要素でなければなりません。ダッシュも同じですが、今回は最後でなければなりません。から までの範囲\-\^(たとえば、バックスラッシュやカラット)のみが一致します。 (無駄なバックスラッシュも削除しました。)\\

regex='^[]0-9a-zA-Z,!^`@{}=().;/~_|[-]*$'

本当に*欲しいです+か?本当に空の文字列を受け入れますか?

関連情報