14

文字列に小文字、大文字、または数字のみが含まれていることを確認しようとしています。

if ! [[ "$TITLE" =~ ^[a-zA-Z0-9]+$ ]]; then echo "INVALID"; fi

考え?

* アップデート *

変数 TITLE は現在、大文字のテキストしか持たないため、通過し、何も出力されません。ただし、特殊文字を TITLE に追加すると、IF ステートメントはそれをキャッチし、INVALID をエコーする必要があります。現在、動作しません。常に無効をエコーし​​ます。これは、正規表現ステートメントが間違っているためだと思います。私が書いたように、3つすべてが含まれているタイトルを探していると思います.

バッシュ 4.2.25

アイデアは、大文字、小文字、または数字のみが含まれている限り、ユーザーは任意のタイトルを追加できる必要があるということです。他のすべての文字は失敗するはずです。

* アップデート *

TITLE = ThisIsAValidTitle の場合、無効としてエコーされます。

TITLE = ThisIs@@@@@@@InvalidTitle の場合、無効もエコーされます。

* 解決 *

奇妙なことに、これを単純化するとうまくいきました:

TEST="Valid0"
if ! [[ "$TEST" =~ [^a-zA-Z0-9] ]]; then
  echo "VALID"
else
  echo "INVALID"
fi

*本当の解決策*

私の変数にはスペースが含まれていました...DUH

ご迷惑をおかけして申し訳ありません...

* 最終的解決 *

これにより、タイトルのスペースが考慮されます

if ! [[ "$TITLE" =~ [^a-zA-Z0-9\ ] ]]; then
  echo "VALID"
else
  echo "INVALID"
fi
4

3 に答える 3

1

指名された答えは間違っています。文字列の最後までチェックしないためです。また、反転しています。条件が言うように:「文字列の先頭が有効な文字である場合、エコーは無効です」

[[ $TITLE =~ ^[a-zA-Z0-9_-]{3,20}$ ]] && ret="VALID" || ret="INVALID"

echo $ret
于 2015-11-13T15:41:30.773 に答える