[Tep-j-general] tep_validate_email の精度について

Back to archive index

Masato Kobayashi ksoun****@rd*****
2007年 10月 26日 (金) 14:47:53 JST


こんにちは、小林@Ksoundです。

>>    $user_pat = "^$word(\.$word)*$";
>>
>>>>
>>
>>でどうでしょう?

>そん時はかなりダイナミックな方法で解決されてましたが

と言うご指摘を頂きましたので書き直しておきます(-o-;)

どちらも変わりはないと思いますが・・・

    $mail_pat = '^(.+)@(.+)$';
    $valid_chars = "[^] \(\)<>@,;:\.\\\"\[]";
    $atom = "$valid_chars+";
    $quoted_user='(\"[^\"]*\")';
    $word = "($atom|$quoted_user)";
    $user_pat = "^$word(\.$word)*$";

を

    $mail_pat = '^(.+)@(.+)$';
    $valid_chars = "[^] \()<>@,;:\.\\\"\[]";
    $valid_user = "[^] \(\)<>@,;:\\\"\[]";
    $atom = "$valid_chars+";
    $atom_user = "$valid_user+";
    $quoted_user='(\"[^\"]*\")';
    $word = "($atom_user|$quoted_user)";
    $user_pat = "^$word(\.$word)*$";

とした方が良いのかも。

>>     function isValidInetAddress($data, $strict = false)
>>     {
>>         $regex = $strict ?
>>'/^([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})$/i' :
>>'/^([*+!.&#$|\'\\%\/0-9a-z^_`{}=?~:-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})$/i';
>>         if (preg_match($regex, trim($data), $matches)) {
>>             return array($matches[1], $matches[2]);
>>         } else {
>>             return false;
>>         }
>>     }

こちらだと今度は

AAA..****@ezweb*****

のようなアドレスがはじかれそうな気がしますが

>「正規表現でメールアドレスの正当性を調べることは難易度が高い」

そうですね。
難しいですし勿論限界がありますので、結局は正当なアドレスをはじくぐらいなら
多少ゆるめに考えた方がリスクは少ないかと思います。

 Masato Kobayashi




Tep-j-general メーリングリストの案内
Back to archive index