PHPの正規表現でメールアドレスをチェックする
フォーム入力のメルアドチェックをphpでやることにななりまして、「正規表現で軽く一発」とのことでした。
そういえば今まで厳格にやったことがなかったな、と「メールアドレス 正規表現」でぐぐってみたら、わんさか出てくるじゃないですか。
しかしなんだか荒れ気味でw(いろんな意味でね)
いつも楽しくチェックしている百式の管理人さんが、かの「404 Blog Not Found」のダンコガイさんにきつく突っ込まれているっていう図式とかね。ええ、泣きそうですよw
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を確認したのですが、本来メールアドレスってのは、再帰下降パーサーで字句解析すべきモノなんだろうなあと思いました。そこまでやる必要があるかどうかは別としてね。