我想测试 STR 包含字母 (az) (AZ) 或字母与数字
同时我有这个
[[ "$STR" =~ [a-zA-Z0-9] ]] && echo "contain alphanumerics"
但这即使 STR 只有数字也有效
而我们只想打印 STR 包含字母或字母和数字的情况”
例子
将打印在以下情况下
gstfg523
HGFER34
JNF
GFGTVT
83bfF
不会打印
2424
4356
632
@65$
&%^$
82472243(*
答案1
从这些例子来看,我想你想检查的$STR
是
- 完全字母数字(只有字母和数字),和
- 不完全由数字组成(至少有一个字母)?
实施这些条件:
[[ "$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
答案2
对于至少有一个 alpha 的 alnum,这将是:
[[ $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"
答案3
如果它是字母数字而不仅仅是数字:
[[ "$STR" =~ ^[a-zA-Z0-9]+$ ]] && [[ ! "$STR" =~ ^[0-9]+$ ]] && echo …