문자열에 알파벳 문자나 알파벳 문자 및 숫자가 포함되어 있는지 확인하는 방법은 무엇입니까?

문자열에 알파벳 문자나 알파벳 문자 및 숫자가 포함되어 있는지 확인하는 방법은 무엇입니까?

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것은

  • 완전 영숫자(문자와 숫자만),그리고
  • 전체가 숫자(최소 문자 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

답변2

적어도 하나의 알파가 있는 alnum의 경우 다음과 같습니다.

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

(참고로@ilkkachu의 답변, 빈 문자열도 제외됨).

또는 POSIX적으로:

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 …

관련 정보