シェルで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

電子メールアドレスを確認する最も安全な方法は、メッセージを送信した後に受信者にリンクをクリックするか、埋め込みトークン(単語、数字、フレーズ)を入力するように求めることです。

関連情報