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