如何检查字符串中是否包含字母字符或字母字符和数字?

如何检查字符串中是否包含字母字符或字母字符和数字?

我想测试 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 …

相关内容