銀の弾丸

プログラミングに関して、いろいろ書き残していければと思っております。

PHPの正規表現でメールアドレスをチェックする

フォーム入力のメルアドチェックをphpでやることにななりまして、「正規表現で軽く一発」とのことでした。

そういえば今まで厳格にやったことがなかったな、と「メールアドレス 正規表現」でぐぐってみたら、わんさか出てくるじゃないですか。

しかしなんだか荒れ気味でw(いろんな意味でね)

いつも楽しくチェックしている百式の管理人さんが、かの「404 Blog Not Found」のダンコガイさんにきつく突っ込まれているっていう図式とかね。ええ、泣きそうですよw

かなり使えるPHPの正規表現まとめ | IDEA*IDEA

VS

404 Blog Not Found:「PHP使いはもう正規表現をblogに書くな」と言わせないでくれ

けっこう昔(2009年ごろ)の案件で、既に大団円という感じはありますが、今回2015年に検索しても、「メルアドチェックはこれでおk」的な、上から目線の情報が大量に流れていて、ダンコガイさんのおっしゃることもよくわかる。ワタシも正直迷いました。

ちょうどダンコガイさんのページにperlと思しきソースがあったので、RFCの該当箇所も参照しながら、phpで書き直してみたのがこれ↓(エスケープをphpに合せた程度ですが)

Inspection of e-mail addresses based on the specification of the RFC2822 Addr-spec · GitHub

軽く確認してOKぽいけど、完全準拠かどうかは自信がありません。妙なところがあったらやさしく突っ込んでくださいな。


そもそも「正規表現一発でやるのはパズルみたいなもの」という意見がありましたが、確かに確かに。結局業務上は/^[^@]+@[^@]+$/ みたいなのでお茶を濁しました。不特定多数の人が触るシステムではないので、これで十分。

しかしまあ、今回はじめてRFC2822を確認したのですが、本来メールアドレスってのは、再帰下降パーサーで字句解析すべきモノなんだろうなあと思いました。そこまでやる必要があるかどうかは別としてね。