サンプル・プログラムの実行例

サンプル・プログラム
checkemail.php | サンプル・プログラム本体。 |
メールアドレスで使える文字
メールアドレスの書き方は、RFC 2282 Internet Message Format【和訳】に定義されている。
しかし、これを定義通りに解釈するとURLより複雑になってしまう。そこで、実用上差し支えない程度に簡略化し、正規表現で表したのが下記である。
しかし、これを定義通りに解釈するとURLより複雑になってしまう。そこで、実用上差し支えない程度に簡略化し、正規表現で表したのが下記である。
/^[0-9a-z\!\#\$\%\&\'\*\/\=\?\^\_\+\-\`\{\\}\~\.]+$/i 今回使った正規表現
- ?
- 直前1文字の0または1回の繰り返し。
- [...]
- 文字クラス。
この中に記述された文字の並びのうちの1文字を表す。
- -
- 文字の範囲指定。
a-z はアルファベット小文字すべてに、A-Zはアルファベット大文字すべてに、0-9は数字すべてにマッチする。
- +
- 直前1文字の1回以上の繰り返し。
ここでは、文字クラス[...]に記述された文字、いずれかの1回以上の繰り返し――すなわち、URL 文字列にマッチすることになる。
- \
- エスケープ。
この直後の1文字自身を指す。
直後の1文字が正規表現の特殊文字(メタキャラクタ)である場合に用いる。サンプル・プログラムの解説
118: /**
119: * メールアドレスかどうか検査する
120: * @param string $email 検査するメールアドレス
121: * @return bool TRUE/FALSE
122: */
123: function is_emailadr($email) {
124: //ホスト名を分離
125: $arr = preg_split('/@/', $email);
126: if (count($arr) == 2) {
127: $res = preg_match(RFC2282, $arr[0]) > 0 ? TRUE : FALSE;
128: } else {
129: $res = FALSE;
130: }
131:
132: return $res;
133: }
メールアドレスかどうか検査する処理は、ユーザー定義関数 is_emailadr として独立させた。まず、ホスト名を分離し、メールアドレス部分に対し関数 preg_match を使ってマッチングさせている。
このプログラムは、メールアドレスの形式が正しいかどうかを検査するだけである。それが存在するかどうかまでは検査していない。
「PHPで正しいメールアドレスかどうか調べる」では、より厳密な方法で検査を行うプログラムを紹介している。参考サイト
- PHPで正しいメールアドレスかどうか調べる:ぱふぅ家のホームページ
(この項おわり)
Webプログラムでは、悪意のあるユーザーが XSS (クロスサイトスクリプティング)や SQLインジェクション を仕掛けてくることがある。その対策として、入力値チェックは必要不可欠だ。
今回は、入力された文字列がメールアドレスかどうかチェックするプログラムを紹介する。
(2022年4月23日)マッチングパターンを定数RFC2282に定義