셸에서 REGEX를 통해 이메일 도메인을 확인할 수 없습니다.

셸에서 REGEX를 통해 이메일 도메인을 확인할 수 없습니다.

정규 표현식이 잘 작동합니다.정규식장소.

그러나 셸 내에서 사용하는 경우에도 아무런 효과가 없습니다.

#!/bin/bash

authEmail="[email protected]"
echo "$authEmail"

if [[ "$authEmail" =~ ^[a-zA-Z0-9_.+-]+@(?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?(test)\.com$ ]]; then
  echo "Proper Email detected $authEmail"
else
  echo "Email address $authEmail is invalid."
fi

항상 인쇄됩니다Email address [email protected] is invalid.

내가 뭐 놓친 거 없니?

답변1

Bash는 =~POSIX ERE(확장 정규 표현식)를 사용하지만 귀하는폴리 메라 제 연쇠 반응통사론. 특히 (?: )ERE는 비캡처 구문을 지원하지 않습니다. PCRE(예: GNU)를 이해하는 도구에 전달하거나 grep정규식을 변경해야 합니다.

  1. GNU 사용grep

    #!/bin/bash
    
    authEmail="[email protected]"
    echo "$authEmail"
    
    if printf '%s\n' "$authEmail" | grep -qP '^[a-zA-Z0-9_.+-]+@(?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?(test)\.com$'; then
      echo "Proper Email detected $authEmail"
    else
      echo "Email address $authEmail is invalid."
    fi
    
  2. 정규식 변경

    #!/bin/bash
    
    authEmail="[email protected]"
    echo "$authEmail"
    
    if [[ "$authEmail" =~ ^[a-zA-Z0-9_.+-]+@(([a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?test\.com$ ]]; then
      echo "Proper Email detected $authEmail"
    else
      echo "Email address $authEmail is invalid."
    fi
    
    

물론 실제로 비캡처 그룹이 필요하지는 않습니다. 또는 캡처 그룹의 경우 PCRE 표현식을 다음과 같이 변경할 수도 있습니다.

^[a-zA-Z0-9_.+-]+@(([a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?test\.com$

답변2

"내가 뭐 놓친 거 없니?"안타깝지만 그렇습니다. RE를 사용하여 이메일 주소를 제대로 인증하는 것은 정말 어렵습니다.정규식을 사용하여 이메일 주소를 확인하는 방법은 무엇입니까?StackOverflow에서는 이 PCRE를 제공합니다.RFC 5322순종하다:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/ =?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\ [\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0 -9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5 [0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}( ?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[ a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\ x01-\x09\x0b\x0c\x0e-\x7f])+)\])

당신은 그것을 직접 사용할 수 있습니다 grep -Po.

이메일 주소를 확인하는 가장 안전한 방법은 메시지를 보낸 후 수신자에게 링크를 클릭하거나 포함된 토큰(단어, 숫자, 문구)을 입력하도록 요청하는 것입니다.

관련 정보