PHP でメールを検証する

Subodh Poudel 2023年1月30日
  1. PHP で filter_var() 関数と FILTER_VALIDATE_EMAIL を使用して電子メールを検証する
  2. PHP で FILTER_VALIDATE_EMAILFILTER_SANITIZE_EMAIL および filter_var() 関数を使用して電子メールを検証する
  3. preg_match() 関数を使用して、正規表現に従って電子メールを検証する
PHP でメールを検証する

filter_var() 関数と FILTER_VALIDATE_EMAIL フィルター名 ID を使用して、PHP で電子メールアドレスを検証する方法を紹介します。filter_var() 関数は、最初の引数として電子メールを受け取り、フィルター名 FILTER_VALIDATE_EMAIL を使用して、RFC 822 の構文に対して電子メールを検証します。このメソッドは、有効な電子メールではなく有効な電子メール形式をチェックします。

また、FILTER_SANITIZE_EMAIL および FILTER_VALIDATE_EMAIL フィルター名 ID と fiter_var() 関数を使用して、PHP で電子メールアドレスを検証する別の方法を示します。このメソッドは、最初に電子メールアドレスをサニタイズし、次に電子メールアドレスを検証します。

正規表現を使用して PHP で電子メールを検証する別の方法を紹介します。このメソッドは、preg_match() 関数を使用して、提供された正規表現に従って電子メールが有効かどうかを確認します。

PHP で filter_var() 関数と FILTER_VALIDATE_EMAIL を使用して電子メールを検証する

filter_var() 関数を使用して、特定のフィルター名で変数をフィルター処理できます。FILTER_VALIDATE_EMAIL フィルター名は、電子メールを確認する必要があることを指定します。この関数は、最初のパラメーターとして電子メールアドレスを文字列として受け取り、2 番目のパラメーターとして上記で指定されたフィルターID を受け取ります。したがって、提供された電子メールが有効かどうかを確認できます。関数が成功した場合、または false を返した場合、関数はフィルター処理されたデータを返します。電子メールは、電子メールが存在するという意味ではなく、有効であると言われます。フィルタ ID は、RFC 822 の構文に対して電子メールを検証します。有効な電子メールと無効な電子メールを使用して、電子メールの検証をテストできます。

たとえば、パラメータ $email を受け取る関数 validateEmail() を作成します。$email 変数で filter_var() 関数を使用し、2 番目のパラメーターとしてフィルターID FILTER_VALIDATE_EMAIL を指定します。filter_var() 関数に if-else 条件を適用します。if ブロックに、電子メールが有効であることを示すメッセージを表示し、else 状態で、電子メールが無効であることを表示します。関数の外で、関数を 2 回呼び出します。最初の関数呼び出しで、引数 peter.piper@iana.orgfirst.last@example.123 を指定します
2 回目の呼び出しで。

例で提供されている電子メールアドレスは、$_POST 変数を使用してフォームからアクセスされていると想定できます。以下の例の関数は 2 回呼び出されます。最初の呼び出しは有効な電子メールアドレスを渡し、2 番目のアドレスは無効な電子メールを渡します。2 番目のメールアドレスはトップレベルドメインの番号が含まれているため無効です。結果は明らかです。

サンプルコード:

#php 7.x
<?php
function validateEmail($email) {
    if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
        echo "{$email}: A valid email"."<br>";
    }
    else {
        echo "{$email}: Not a valid email"."<br>";
    }
}
validateEmail('peter.piper@iana.org');
validateEmail('first.last@example.123');
?>

出力:

phppeter.piper@iana.org: A valid email 
first.last@example.123:Not a valid email

PHP で FILTER_VALIDATE_EMAILFILTER_SANITIZE_EMAIL および filter_var() 関数を使用して電子メールを検証する

最初のメソッドで追加の FILTER_SANITIZE_EMAIL フィルター名 ID を使用して、電子メールアドレスからすべての不正な文字を削除できます。フィルタ名 id は、filter_var() 関数の 2 番目の引数であり、電子メールアドレスが最初の引数です。この関数は、サニタイズされた電子メールを返します。再度、この機能を使用して、サニタイズ後に電子メールアドレスの有効性を確認できます。このために、FILTER_VALIDATE_EMAIL フィルター名 ID を使用して最初の方法に従うことができます。

たとえば、変数 $email を作成し、不正な文字を含む電子メールアドレスを保存します。メール ram(.mugu)@exa//mple.org を文字列として変数に保存します。変数で filter_var() 関数を使用し、2 番目のパラメーターとして FILTER_SANITIZE_EMAIL id を使用します。関数を同じ $email 変数に格納します。次に、最初の方法と同様に、if-else ステートメントを適用します。今回は、関数のフィルター名として FILTER_VALIDATE_EMAIL メールを使用します。同様に、メッセージを表示します。

以下の例では、不正な文字を含む電子メールアドレスを取得し、filter_var() 関数がそれらの文字をフィルタリングして、提供された電子メールをサニタイズします。例で提供されている電子メールアドレスには、()//などの不正な文字が含まれています。この関数は、最初にこれらの文字を電子メールから削除してから、電子メールを検証します。

サンプルコード:

#php 7.x
<?php
$email = "ram(.mugu)@exa//mple.org";
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo "{$email}: A valid email"."<br>";
}
else{
    echo "{$email}:Not a valid email"."<br>";
}
?>

出力:

ram.mugu@example.org: A valid email

preg_match() 関数を使用して、正規表現に従って電子メールを検証する

preg_match() 関数を使用して、PHP の電子メールアドレスを検証できます。このメソッドは、電子メールの検証ルールに正規表現を使用します。自分で正規表現を作成し、有効な電子メールのルールを定義できます。preg_match() 関数は 2つのパラメーターを取ります。最初のパラメーターは正規表現で、2 番目のパラメーターはチェックする電子メールです。三項演算子を使用して、関数とともに電子メールの有効性を確認できます。

たとえば、$email_first$email_secon の 2つの変数を作成し、それらの変数に 2つの電子メールアドレスを格納します。最初に有効なメール firstlast11@gmail.com を保存し、2 番目に無効なメール firstlast11@gmail.com を保存します。1つのパラメーターを受け取る関数 validateEmail() を記述します。パラメータに $email という名前を付けます。関数内で、サンプルコードのように、$regex 変数に正規表現を記述します。次に、チェックする条件が preg_match() 関数である三項演算子を記述します。$regex を最初のパラメーターとして、$email を 2 番目のパラメーターとして使用します。条件が真の場合は電子メールが有効であるというメッセージを、条件が偽の場合は電子メールが無効であるというメッセージを出力します。三項式全体をエコーし​​ます。関数の外で、validateEmail() 関数を 2 回呼び出します。最初の関数呼び出しで $email_first 変数を使用し、2 番目の関数呼び出しで $email_second 変数を使用します。

以下の例では、電子メールを検証するためのルールを作成する正規表現を作成しました。有効な電子メールには、受信者名、@記号、ドメイン、およびトップレベルドメインが含まれています。上記で作成された正規表現は、受信者名を英数字値として受け入れます。アルファベットは大文字と小文字の両方で構成されます。ピリオドも受け付けます。電子メールには@記号が必要です。ドメインにはアルファベットのみが含まれます。その場合、電子メールにはピリオドが必要です。トップレベルドメインはアルファベットのみで構成され、長さは 2 または 3 である必要があります。正規表現は、このルールに基づいて作成されます。最初の電子メールはすべてのルールを満たしているため有効ですが、2 番目の電子メールは無効です。ドメイン名に番号があり、トップレベルドメインの前にピリオドがないため、無効です。

サンプルコード:

# php 7.x
<?php
$email_first = 'firstlast11@gmail.com';
$email_second ='firstlast@11gmail,com';
function validateEmail($email) {
    $regex = "/^([a-zA-Z0-9\.]+@+[a-zA-Z]+(\.)+[a-zA-Z]{2,3})$/";
    echo preg_match($regex, $email) ? "The email is valid"."<br>" :"The email is       not valid";
}
validateEmail($email_first);
validateEmail($email_second);
?>

出力:

The email is valid 
The email is not valid
著者: Subodh Poudel
Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn