Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】FILTER_VALIDATE_EMAIL定数の使い方

FILTER_VALIDATE_EMAIL定数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

FILTER_VALIDATE_EMAIL定数は、入力された文字列が有効なメールアドレスの形式であるかどうかを検証するために用いられる定数です。

この定数は、主にPHPのfilter_var()関数やfilter_input()関数などのフィルタリング関連の関数において、検証フィルターとして指定されます。ウェブアプリケーション開発において、ユーザーが入力したメールアドレスのデータが適切な形式であるかを確認することは、データの整合性を保ち、セキュリティを向上させる上で非常に重要です。

具体的には、メールアドレスの基本的な構文規則、例えば「@」記号の存在、ユーザー名部分とドメイン部分の形式、ドメイン名がRFC(Request for Comments)に準拠しているかなどをチェックします。これにより、誤った形式の入力や基本的な構文違反のあるデータがシステムに取り込まれるのを防ぎ、アプリケーションの安定性を高めることができます。

ただし、この定数による検証は、あくまで形式的なチェックに限定されます。つまり、入力されたメールアドレスが実際に存在するかどうか、あるいはそのメールアドレスにメールを送信できるかどうかまでは確認できません。そのため、登録されたメールアドレスの有効性をさらに厳密に保証したい場合は、追加的な確認(例えば、確認メールの送信など)の実装を検討する必要があります。

構文(syntax)

1<?php
2$email = "user@example.com";
3$isValid = filter_var($email, FILTER_VALIDATE_EMAIL);
4?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHPでメールアドレス形式を検証する

1<?php
2
3/**
4 * 入力された文字列が有効なメールアドレス形式であるかを検証する関数。
5 *
6 * PHPのfilter_var関数とFILTER_VALIDATE_EMAIL定数を使用して、
7 * RFC(Request for Comments)に準拠したメールアドレスの形式をチェックします。
8 *
9 * @param string $email 検証対象のメールアドレス文字列。
10 * @return void 検証結果(有効/無効)を標準出力に表示します。
11 */
12function validateEmailAddress(string $email): void
13{
14    // filter_var関数は、第一引数の変数を第二引数で指定されたフィルターで処理します。
15    // ここでは、FILTER_VALIDATE_EMAIL定数を使ってメールアドレスの形式を検証しています。
16    //
17    // 検証が成功した場合(有効なメールアドレス形式の場合)、
18    // filter_var関数はフィルタリングされた値(元のメールアドレス文字列)を返します。
19    // PHPでは、空文字列や0以外の値は真と評価されます。
20    //
21    // 検証が失敗した場合(無効なメールアドレス形式の場合)、
22    // filter_var関数はbooleanのfalseを返します。
23    // falseは条件式で偽と評価されます。
24    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
25        echo "'" . $email . "' は有効なメールアドレスです。\n";
26    } else {
27        echo "'" . $email . "' は無効なメールアドレスです。\n";
28    }
29}
30
31// --- 関数利用例 ---
32
33// 有効なメールアドレスの例
34validateEmailAddress("test@example.com");
35validateEmailAddress("john.doe@subdomain.example.co.jp");
36validateEmailAddress("user123@domain.org");
37
38// 無効なメールアドレスの例
39validateEmailAddress("invalid-email-format"); // @記号がない
40validateEmailAddress("user@.com");            // ドメイン名が不正
41validateEmailAddress("user@domain.");         // ドメインの最後にドットがある
42validateEmailAddress("user @domain.com");     // スペースが含まれている
43validateEmailAddress("user@domain.c");        // TLD(トップレベルドメイン)が短すぎる場合など
44
45?>

PHPのこのサンプルコードは、入力された文字列が「有効なメールアドレスの形式」であるかを簡単に検証する方法を示しています。システム開発において、ユーザーからのメールアドレス入力をチェックする際によく利用される機能です。

このコードでは、PHPのfilter_var関数とFILTER_VALIDATE_EMAIL定数を使用しています。filter_var関数は、第一引数に検証したい文字列(メールアドレス)、第二引数に適用するフィルターの種類を指定します。ここで使われるFILTER_VALIDATE_EMAILは、RFC(インターネットの標準規格)に準拠したメールアドレスの形式に合致するかどうかをチェックするための定数です。

validateEmailAddress関数は、検証したいメールアドレス文字列を引数として受け取ります。内部でfilter_var関数が呼び出され、メールアドレスが有効な形式であれば、検証された元のメールアドレス文字列が戻り値として返されます。PHPでは、この文字列は条件式で「真」として評価されます。一方、無効な形式であれば、falseという値が戻り値として返され、条件式で「偽」と評価されます。このfilter_var関数の戻り値を利用して、コードは「有効なメールアドレスです」または「無効なメールアドレスです」という結果を画面に表示しています。validateEmailAddress関数自体は特定の戻り値を持ちませんが、検証結果を直接出力する役割を持っています。

FILTER_VALIDATE_EMAILは、filter_var関数と組み合わせて使用し、入力された文字列がRFCに準拠したメールアドレスの「形式」に合致するかを検証するPHPの定数です。この定数による検証は、あくまで形式チェックであり、そのメールアドレスが実際に存在するか、メールが送信可能であるかまでは確認できません。そのため、例えばユーザー登録の際には、別途確認メールを送信して実在性を検証するなどの追加措置を検討してください。また、この定数自体には不正な文字列を安全な形式に変換する(サニタイズ)機能はありません。サニタイズが必要な場合は、別のフィルターや関数を併用してください。filter_var関数は、検証成功時にフィルタリングされた値を返し、失敗時にはfalseを返すため、条件分岐で直接利用できます。

PHP FILTER_VALIDATE_EMAILでメール検証する

1<?php
2
3/**
4 * 指定されたメールアドレスが有効なフォーマットであるかを検証します。
5 *
6 * FILTER_VALIDATE_EMAIL 定数は、メールアドレスの基本的な構文規則(例: @の存在、ドメイン部分の形式など)に
7 * 従って文字列を評価します。内部的には複雑な正規表現のようなロジックを用いて検証を行いますが、
8 * 開発者が直接正規表現を記述する必要はありません。
9 *
10 * @param string $email 検証するメールアドレス文字列。
11 * @return void 検証結果をコンソールに出力します。
12 */
13function validateEmailFormat(string $email): void
14{
15    // filter_var 関数と FILTER_VALIDATE_EMAIL 定数を使用してメールアドレスの妥当性をチェック
16    // 有効なメールアドレスであれば、元のメールアドレス文字列(または整形された文字列)が返され、
17    // 無効な場合は false が返されます。
18    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
19        echo "'{$email}' は有効なメールアドレスのフォーマットです。" . PHP_EOL;
20    } else {
21        echo "'{$email}' は無効なメールアドレスのフォーマットです。" . PHP_EOL;
22    }
23}
24
25// --- 使用例 ---
26// さまざまなメールアドレスで検証関数を呼び出します。
27validateEmailFormat("test@example.com");             // 有効な例
28validateEmailFormat("user.name+tag@sub.domain.co.jp"); // 有効な例(複雑な形式)
29validateEmailFormat("invalid-email");                // @がないため無効
30validateEmailFormat("user@domain");                  // トップレベルドメインがないため、多くのケースで無効 (RFC的に)
31validateEmailFormat("user@.com");                    // ドメインがピリオドで始まるため無効
32validateEmailFormat("user@-domain.com");             // ドメインがハイフンで始まるため無効
33validateEmailFormat("user@domain-.com");             // ドメインがハイフンで終わるため無効
34
35?>

FILTER_VALIDATE_EMAILは、PHPの標準機能で提供される定数の一つです。この定数は、指定された文字列が有効なメールアドレスの書式に沿っているかを検証するために使用されます。開発者が複雑な正規表現を記述することなく、簡単にメールアドレスの基本的な構文(「@」の存在、ドメイン部分の形式など)をチェックできる点が特徴です。

サンプルコードでは、validateEmailFormatという関数を定義し、その中でfilter_var関数とFILTER_VALIDATE_EMAIL定数を組み合わせてメールアドレスの妥当性を確認しています。filter_var関数は、検証対象のメールアドレス文字列とFILTER_VALIDATE_EMAIL定数を引数として受け取ります。

この関数は、引数として検証したいメールアドレス($email)を受け取ります。内部でfilter_var関数による検証を行い、メールアドレスが有効なフォーマットであれば元の文字列を、無効な場合はfalseを返します。サンプルコードでは、このfilter_varの戻り値を利用して、有効か無効かのメッセージをコンソールに出力します。関数の戻り値自体はvoid型で、検証結果は画面に直接表示されます。様々な形式のメールアドレスで検証を行い、有効なものと無効なものの区別がどのように行われるかを示しています。

FILTER_VALIDATE_EMAILは、メールアドレスの基本的な構文が正しいか、つまり「フォーマット」が有効かを検証するための定数です。内部では複雑な正規表現のようなロジックを用いていますが、開発者がその詳細を意識することなく、安全に利用できます。

しかし、この定数による検証は、入力されたメールアドレスがRFC(インターネット標準)に準拠した形式であるかを確認するだけであり、そのメールアドレスが実際に存在するか、または現在利用可能であるかといった「実在性」まではチェックしません。そのため、例えばユーザー登録などでメールアドレスの信頼性を高める必要がある場合には、この形式検証に加えて、確認メールの送信など、実在性を検証するための別の仕組みと組み合わせることが重要です。誤った認識で「有効なメールアドレス」と判断しないようご注意ください。

関連コンテンツ