Como verificar se a string contém caracteres alfabéticos ou caracteres alfabéticos e números?

2

Eu quero testar STR contendo alfabético como (a-z) (A-Z) ou alfabético com números

enquanto isso eu tenho isso

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

mas isso funciona mesmo STR tem apenas números

enquanto queremos imprimir apenas se STR for alfabético ou alfabético & números "

exemplo

será impresso no seguinte caso

gstfg523
HGFER34
JNF
GFGTVT
83bfF

não será impresso em

2424
4356
632
@65$
&%^$
82472243(*
    
por jango 10.01.2018 / 16:04

3 respostas

3

A julgar pelos exemplos, acho que você quer verificar se $STR é

  • totalmente alfanumérico (nada além de letras e números), e
  • não completamente feito de números (há pelo menos uma letra)?

Implementando essas condições:

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

Isso também aceita a string vazia. Para mudar isso, use + em vez de * no primeiro padrão.

Testes:

$ 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
    
por 10.01.2018 / 16:28
5

Para alnums com pelo menos um alfa, isso seria:

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

(observe que, ao contrário da @ resposta do ilkkachu , que também exclui a string vazia).

Ou POSIXly:

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

valid "$STR" || printf >&2 '"%s" is not valid\n' "$STR"
    
por 10.01.2018 / 16:44
2

Se for alfanumérico e não apenas números:

[[ "$STR"  =~ ^[a-zA-Z0-9]+$ ]] && [[ ! "$STR"  =~ ^[0-9]+$ ]] && echo …
    
por 10.01.2018 / 16:22