[Codeigniter-users] CI_Form_validation.php のメールアドレス検証の正規表現

Back to archive index

Kenichi Ando neo.k****@gmail*****
2011年 3月 2日 (水) 18:56:21 JST


唐金さん

はじめまして。安藤です。

2011年3月2日18:40 Toshihiro Karakane <karak****@karak*****>:
> はじめまして。
>
> 唐金と申します。
>
> CodeIgniterを利用しているのですが、メールアドレスの正規表現が正しくないのではないか
> と思うのですが、この問題について事情をご存じの方はいらっしゃいませんか?
>
> 具体的には、CI_Form_validationの中のメールアドレスの正規表現は次の用になっています。
>
>   "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix"
>
> 一方で、メールアドレスに利用可能な文字は、
>
>   - 半角英数字(大文字小文字)
>   - ! # $ % & ' * + - / = ? ^ _ ` { | } ~
>   - .(先頭と末尾以外で使用可能。2個以上連続してはならない)
>   (→ 参照先: http://ja.wikipedia.org/wiki/メールアドレス 関連するRFC文書を参照しても同様)
>
> となっています。
>
> 前述の正規表現では抜け落ちる記号が結構あり、アンダースコアなど本当に実際に利用されそうな文字
> では検証に失敗してしまいます。
>
> この問題は比較的容易に指摘されそうだと思ったので公式サイトのバグトラッカー、フォーラムを
> 参照したのですが、それらしき記述は見つかりませんでした。
>
> これって不具合に該当すると思うのですが、どうなんでしょうか?

個人的な意見で、ユーザ会を代表するものではありませんが、
RFCに沿った厳密な正規表現を書くと、例えば
以下のようなご意見もあります。
http://www.din.or.jp/~ohzaki/mail_regex.htm

大変長文になってしまいます。
また、携帯キャリアによってはRFC違反になってしまうメアドも
存在し、摘便書き直しが存在します。

つまり、
これらを配慮し、精度の低い正規表現が黙認されているのでは
ないかと思っております。
(RFCに真面目に準拠すると大変なことになる等)

最後に、
PHPのcheckdnsrr()関数を用いて、ホスト名をチェックするように
すれば、メールアドレスの有効性をより厳密にチェックできますので、
個人的には、緩い正規表現とcheckdnsrr()関数かなぁと思っております。

もちろん、CIのバリデーションを見直すことは悪いことではない
と思います。CakePHPやZend FW、Symfonyはもっと良い正規表現
だった記憶があります。

// 安藤建一


>
> # ところで、バグをレポートする場所ってbitbucketのトラッカーなのでしょうか? フォーラムなのでしょうか?
> # ご存知のかたいらっしゃれば教えていただければと思います。
>
> どうぞよろしくお願いいたします。
>
> --
> 唐金 利宏
> karak****@karra*****
>
> _______________________________________________
> Codeigniter-users mailing list
> Codei****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>




Codeigniter-users メーリングリストの案内
Back to archive index