メールアドレスのバリデーション

2008/10/04 未分類 spok

メールアドレスのバリデーション

Qdmailでは、メールアドレスを正規表現でチェックしています。
ただし、デフォルトではごく簡単な正規表現であり、@(アットマーク)が含まれているかどうか、程度のものです。
(1.1.8b以降の機能です)

簡単な正規表現にしてある理由

メールアドレスのチェックを完璧に正規表現でチェックするのは、理論的には不可能と言われています。
(参考:メールアドレスに一致する正規表現

正規表現を使う限り、どこかで割り切る必要があり、その程度はシステムの要求される要件によります。
したがって、Qdmailでは、必要最低限の正規表現だけを提供し、その中身を変えたいユーザーのために、正規表現の変更メソッドを用意しています。

Qdmailのデフォルトでは、preg_match関数で
/[^@]+@[^@]+/
となっています。

使い方

$mail -> varidateAddressRegex( 'preg_match用の正規表現' );
サンプル1
$mail -> varidateAddressRegex( '/[^@]+@[^@]+/' );
内部でpreg関数を呼び出しますが、デリミタ(/)は不要です。

サンプル2
Qdmailに渡されたアドレスが、nullまたはカラ文字列''であった場合も、エラーを出さないようにする。
$mail -> varidateAddressRegex( '/([^@]+@[^@]+)|(^$)/' );
サンプル3
CakePHP v 1.2.0.3830 で使われている正規表現
 $mail -> varidateAddressRegex(
    '/^[a-z0-9!#$%&'*+\/=?^_`|~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`|~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[a-z]2,4|museum|travel)$/i'
 );

自作バリデーションメソッドの使い方

なお、正規表現で物足りない方は、メールアドレスバリデーション関数を自作して、それをQdmailに組み込むことも可能です。
フレームワークなどでバリデーションメソッドをお持ちの場合は、それを使うこともできるでしょう。

例えば、自作のメールアドレスバリデーション関数が

クラス Validation、メソッドemail()ということであれば、
$mail -> addressValidationMethod('Validation','email');
としてください。
メソッドemailは、バリデーションがOKの場合は、true,ダメな場合はfalseを返り値として返して下さい。

Qdmail内部では
call_user_func( array('Validation','email') , $addr );
のような形で呼び出しています。
(スタティック呼びだしです。)

自作バリデーションメソッドの例

<?php

class Validation {

   function email( $address ){

   if(0==preg_match( '/([^@]+@[^@]+)|(^$)/' , $address)){
         return false;
      }else{
         return true;
      }
   }

}
このクラスのファイルはユーザーにてあらかじめインクルードしておいてください。
(自作するならもっと複雑なメソッドになるでしょうね)