6

指定された文字列に数字以外の文字が含まれているかどうかを確認するにはどうすればよいですか, 例:

x11z returns > 0
x$1 also returns > 0
1111~ also returns > 0

キャラクターとは、 の間ではないすべてを意味します0-9。同様のスレッドを見ましたが、「非0-9」について話しているスレッドはありませんが、それがa-zまたはA-Z.

4

5 に答える 5

8

否定された文字クラスを使用するだけです:

grep [^0-9]

これは、数字のみで構成される文字列ではなく、数値以外の文字と一致します。

于 2013-06-01T17:47:09.503 に答える
8

bashパターンマッチングを使用するだけで:

[[ "$MY_VAR" =~ ^[^0-9]+$ ]] && echo "no digit in $MY_VAR"
于 2013-06-01T18:11:52.013 に答える
3

このようなもの:

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
于 2013-06-01T18:04:47.700 に答える
3

これらの提案のほとんどは、最初の文字が数字の場合は true を返しますが、文字列内にエラーは見つかりません。以下の関数は、文字列全体が数字の場合は true を返し、文字列内に数字以外が検出された場合は false を返します。

function isdigit () {
   [ $# -eq 1 ] || return 1;
   [[ $1 = *[^0-9]* ]] && return 1
   return 0
}
于 2013-11-15T17:44:48.793 に答える
1

別のオプション、bash の「封じ込め」チェック

[[ "xf4fgh" = *[^0-9]* ]]
echo $?
0
[[ "1234" = *[^0-9]* ]]
echo $?
1
于 2013-06-01T18:17:58.443 に答える