Bash 하위 도메인 정규식 유효성 검사가 일치하지 않습니다.

Bash 하위 도메인 정규식 유효성 검사가 일치하지 않습니다.

사용자가 입력한 하위 도메인이 유효한지 확인하려고 하는데, 무엇을 전달해도 작동하지 않습니다. 정규식이 괜찮다는 것을 알고 있으므로 문제는 "if" 논리이지만 쉘/bash는 처음입니다.

#!/bin/bash
#

echo Enter the subdomain\'s name to configure.
read SUBDOMAIN

if [[ ! $SUBDOMAIN =~ [A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])? ]]; then
    echo "$SUBDOMAIN is not a valid domain"
fi

예:
허용됩니다(일반 하위 도메인): 테스트가
허용되지 않습니다(유효하지 않은 하위 도메인): -
허용되지 않습니다(유효하지 않은 하위 도메인): (null)
허용되지 않습니다(유효하지 않은 하위 도메인): #$??&@ #&?$ ##$

저는 쉘을 사용하는 것을 선호하지만 정규 표현식의 괄호로 인해 스크립트에서 오류가 발생합니다.

grep으로 할 수 있는지는 잘 모르겠지만, grep을 사용하는 방법을 전혀 이해하지 못했고 항상 혼란스러웠습니다.

답변1

"영숫자" 다음에 "영숫자 또는 대시"를 일치시키고 끝에 대시가 없어 총 1..62자가 되도록 하려는 경우 이 RE가 작동합니다.

^[[:alnum:]](([[:alnum:]]|-){0,61}[[:alnum:]])?$

이는 문자열의 시작과 끝에 바인딩되므로 RE는 전체 문자열과 일치해야 합니다.

  • 줄의 시작^
  • 단일 영숫자, 대문자 또는 소문자[[:alnum:]]
  • 선택적 블록(괄호로 묶고 (... )로 끝남 ?)
    • [[:alnum:]]또는 대시 -, 0~60회 반복
    • [[:alnum:]]
  • 줄 끝$

[[:alnum:]]이 답변 아래의 설명에서 제안한 것처럼 범위가 현재 로케일의 영향을 받는다는 점을 지적해야 합니다 . "ASCII" AZ, az 및 0-9만 일치하는지 확인하려면 으로 끝나는지 확인해야 합니다 LANG=C. 그렇지 않으면 á é ø ß 등과 같은 다른 문자가 허용될 수 있습니다.

관련 정보