web-dev-qa-db-ja.com

文字列にアルファベット文字またはアルファベット文字と数字が含まれているかどうかを確認するにはどうすればよいですか?

テストしたいSTR(a-z)(A-Z)のようなアルファベットまたは数字付きのアルファベットを含む

一方、私はこれを持っています

[[ "$STR"  =~ [a-zA-Z0-9] ]] && echo "contain alphanumerics"

STRは数値のみです)

STRに英字または英字と数字が含まれている場合にのみ印刷する必要があります。 "

次の場合に印刷されます

gstfg523
HGFER34
JNF
GFGTVT
83bfF

印刷されません

2424
4356
632
@65$
&%^$
82472243(*
3
jango

例から判断すると、あなたはそれを確認したいと思います$STR

  • 完全な英数字(文字と数字のみ)、および
  • 完全に数字でできていませんか(少なくとも1つの文字があります)?

それらの条件の実装:

[[ "$STR" =~ ^[[:alnum:]]*$ ]] && [[ ! "$STR" =~ ^[[:digit:]]+$ ]] && echo ok

これは空の文字列も受け入れます。これを変更するには、+ の代わりに *最初のパターン。

テスト:

$ for STR in "" . .x .9 x x9 9 ; do 
    echo -en "$STR\t"; 
    [[ "$STR" =~ ^[[:alnum:]]*$ ]] && [[ ! "$STR" =~ ^[[:digit:]]+$ ]] && echo ok || echo not ok ; 
  done 
        ok
.       not ok
.x      not ok
.9      not ok
x       ok
x9      ok
9       not ok
4
ilkkachu

少なくとも1つのアルファを持つアルナムの場合、それは次のようになります。

[[ $STR =~ ^[[:alnum:]]*[[:alpha:]][[:alnum:]]*$ ]]

@ ilkkachuの回答 とは逆に、空の文字列も除外されることに注意してください)。

またはPOSIXly:

valid() case $1 in
  (*[![:alnum:]]*) false;;
  (*[[:alpha:]]*) true;;
  (*) false;;
esac

valid "$STR" || printf >&2 '"%s" is not valid\n' "$STR"
5

数字だけでなく英数字の場合:

[[ "$STR"  =~ ^[a-zA-Z0-9]+$ ]] && [[ ! "$STR"  =~ ^[0-9]+$ ]] && echo …
2
Isaac