メールアドレスのバリデーション
2008/10/04
メールアドレスのバリデーション
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; } } }このクラスのファイルはユーザーにてあらかじめインクルードしておいてください。
(自作するならもっと複雑なメソッドになるでしょうね)