ねこさんとへびさんの新人技術ブログ

新人エンジニアのねこさんとへびさんの、技術向上のためのブログです。

Memo!実用的ではないかもしれないメールアドレスのバリデーション方法 - PHP

PHPにはユーザーが入力した値を簡単に検証することができる仕組みがあります。
例えば$_POST[’variable_name']の値を受け取るとど同時にフィルターをかけたい場合、以下のように書きます。

filter_input ( int $type , string $variable_name [, int $filter] )
$filterが省略された場合は、検証はなされず$_POST[’variable_name']の値がそのまま受け取れます。

どんなフィルターが使えるかは下記のページを参考にしてください。
PHP: 検証フィルタ - Manual

メールアドレスの検証には正規表現が利用されることが多いですが、マニュアルにFILTER_VALIDATE_EMAILという検証フィルタがあります。
これは使えないのでしょうか。

<?php
$mail = filter_input(INPUT_POST, 'mail', FILTER_VALIDATE_EMAIL);

こんなふうに書けたらシンプルで正規表現を使うよりずっといい。
だがしかし…

先ほどのマニュアルのFILTER_VALIDATE_EMAIL欄をみてみましょう。

この検証は、e-mail アドレスが RFC 822 に沿った形式であるかどうかを確かめます。

つまり標準規格RFC 822 準拠していないメールアドレスが入力された場合、フィルタリングされてFALSEが返されてしまうのです。
そしてかつて、ドコモなど携帯キャリアのメアドが規格外仕様だった時代があったという。

使えない!
不特定多数のユーザーが入力するシステムの場合、クレームや不具合報告が届きそう。
だだ、社用メールアドレスしか許容しないなど、規格外のメールアドレスを弾ける状況であれば十分活躍してくれそうです。

(byへびさん)