指定された文字列に数字以外の文字が含まれているかどうかを確認するにはどうすればよいですか, 例:
x11z returns > 0
x$1 also returns > 0
1111~ also returns > 0
キャラクターとは、 の間ではないすべてを意味します0-9
。同様のスレッドを見ましたが、「非0-9」について話しているスレッドはありませんが、それがa-z
またはA-Z
.
否定された文字クラスを使用するだけです:
grep [^0-9]
これは、数字のみで構成される文字列ではなく、数値以外の文字と一致します。
bash
パターンマッチングを使用するだけで:
[[ "$MY_VAR" =~ ^[^0-9]+$ ]] && echo "no digit in $MY_VAR"
このようなもの:
if [[ "xf44wd" =~ [0-9]+ ]]; then
echo "contains $?"
else
echo "does no contains $?"
fi
また
if [[ ! "xf44wd" =~ [0-9]+ ]]; then
echo "does not contains $?"
else
echo "contains $?"
fi
これらの提案のほとんどは、最初の文字が数字の場合は true を返しますが、文字列内にエラーは見つかりません。以下の関数は、文字列全体が数字の場合は true を返し、文字列内に数字以外が検出された場合は false を返します。
function isdigit () {
[ $# -eq 1 ] || return 1;
[[ $1 = *[^0-9]* ]] && return 1
return 0
}
別のオプション、bash の「封じ込め」チェック
[[ "xf4fgh" = *[^0-9]* ]]
echo $?
0
[[ "1234" = *[^0-9]* ]]
echo $?
1