정규식 소문자 스크립트 유효성 검사

정규식 소문자 스크립트 유효성 검사

입력한 문자열이 모두 소문자인지 확인하는 숙제를 하고 있습니다. 다음은 우리가 제공하는 기본 스크립트입니다.

변경해야 할 줄은 다음과 같습니다.

if [[ "$input" =~ Add your regular expression here ]]

[a-z]소문자 하나만 입력 하면 유효성이 검사됩니다. "Brian"을 사용하면 [[:lower:]]유효성이 검사되고 "cats"는 확인되지 않지만 횡설수설하는 것은 trhrh괜찮습니다. 여기서 사용할 정규식을 모르겠습니다. 도움을 주시면 대단히 감사하겠습니다.

답변1

문자열에 다음과 같은 내용이 포함되어 있는지 테스트합니다.~ 아니다소문자.

if [[ "$input" =~ [^[:lower:]] ]]; then
    # contains something that is not a lower case letter
else
    # contain only lower case letters
fi

또는,

if ! [[ "$input" =~ [^[:lower:]] ]]; then
    # contain only lower case letters
fi

대괄호로 묶인 표현식의 시작 부분은 ^일치 의미를 반대로 하여 다음과 같은 [^abc]단일 문자와 일치합니다.~ 아니다 a, b, 또는 c.

또는 문자열을 양쪽 끝에 고정하여 문자열의 전체 길이를 일치시킵니다.

if [[ "$input" =~ ^[[:lower:]]+$ ]]; then
    # contain only lower case letters
fi

^표현식의 시작 부분 은 문자열의 시작 부분에만 고정되고 $끝 부분은 문자열 끝 부분에 고정됩니다. 그 사이에는 를 사용한 소문자 [[:lower:]]+, 즉 하나 이상의 소문자만 허용됩니다. *대신 사용하면 +표현식이 빈 문자열에서도 성공적으로 일치할 수 있습니다.

[[:lower:]](단일 소문자와 일치) 및 [:lower:]문자 :, l, o, w, e또는 ) 중 하나 와 일치하는 차이점도 확인하세요 r. 원래 질문에서 Brian일치하는 [:lower:]항목 은 cats일치하지 않는다고 말씀하셨는데, 이제 이해가 되실 겁니다. 편집 시 표현식을 올바른 으로 변경했으며 [[:lower:]]이제 cats일치해야 합니다.


정규식 일치에 대해 글로빙 일치가 있는 경우:

if [[ "$input" == *[![:lower:]]* ]]; then
    # contains something that is not a lower case letter
else
    # contain only lower case letters
fi

globbing 패턴에서 !대괄호로 묶인 표현식의 시작 부분은 정규 표현식의 경우와 동일하게 작동합니다 ( 글로빙 패턴에서도 인식할 수 있다고 ^생각하지만 ).bash^

답변2

원하는 경우 이 라이너로 확인할 수도 있습니다.

echo "$input" | grep -qE '^[[:lower:]]*$' && echo "All LowerCase" || echo "Not All LowerCase"

관련 정보