![문자열에 알파벳 문자나 알파벳 문자 및 숫자가 포함되어 있는지 확인하는 방법은 무엇입니까?](https://linux55.com/image/125251/%EB%AC%B8%EC%9E%90%EC%97%B4%EC%97%90%20%EC%95%8C%ED%8C%8C%EB%B2%B3%20%EB%AC%B8%EC%9E%90%EB%82%98%20%EC%95%8C%ED%8C%8C%EB%B2%B3%20%EB%AC%B8%EC%9E%90%20%EB%B0%8F%20%EC%88%AB%EC%9E%90%EA%B0%80%20%ED%8F%AC%ED%95%A8%EB%90%98%EC%96%B4%20%EC%9E%88%EB%8A%94%EC%A7%80%20%ED%99%95%EC%9D%B8%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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 …