• 締切済み

[正規表現]メールアドレスのチェックについて

メールアドレスのローカル部に不正な文字が使われていないかをチェックするものを作成しましたが、許可されるはずの'(シングルクォーテーション)だけがNGになってしまいます。 環境はPHP5、ソースは下記のとおりなのですがアドバイスいただけないでしょうか。 <認める文字> a-z A-Z 0-9 ! # $ % & ' * + - / = ? ^ _ ` { | } ~ <チェック部分のソース> preg_match("/^\s*[-\w._!#$%&\'*+\\/=?^`{|}~]", $add_local) <現象> テストで「!#$%&'*+-/=?^_`.{|}~」をチェックするとNG '(シングルクォーテーション)を消した同アドレスはOK

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

なるほど勉強用でしたらたとえば以下のようにpreg_quote()すると 効率的でしょう。 <? $add_local="!#$%&'*+-/=?^_`.{|}~"; $pattern="\w\-".preg_quote("!#$%&'*+/=?^`.{|}~","/"); if(preg_match("/^[".$pattern."]+$/", $add_local)) print "OK"; else print "NG"; print $pattern; ?> ちなみに\wには「_」も含まれます、「-」は特殊なので別途指示しています 前回例示してあるとおり、quoted-stringで処理されている可能性 も視野に入れると、かなり正規表現としては面倒な部類になると おもいますよ

noname#102084
質問者

お礼

半年越しのお礼になってしまい大変申し訳ありません。 結局解決できず、最近になってたまたま(?)解決できたのでしめさせていただこうと思います。 教えていただいたpreg_quote()も導入しましたが、当時は'だけがNGなわけがわかりませんでした。 ところが、最近になって文字コードをShift_JisからUTF8に変更し、PGのほうもそれに対応したところ'もOKになりました。 どうやらShift_Jisのせいだったようです。(多分ですが・・・) アドバイスをいただいておきながら長らく放置してしまい申し訳ありませんでした。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

最近同じような質問が何度かでていますが、 結局無駄なのであまり厳密にチェックする必要はありません。 ルールはこちらをご覧ください http://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9#.E3.83.AD.E3.83.BC.E3.82.AB.E3.83.AB.E9.83.A8.E3.81.AB.E4.BD.BF.E7.94.A8.E3.81.A7.E3.81.8D.E3.82.8B.E6.96.87.E5.AD.97 入力チェックというのはあくまでも、入力時のタイポのチェックや 入力の勘違いを指摘する程度のものです。 こまかくチェックしても、結局はそのユーザーアカウントが存在 するかをチェックしているわけではないですから、やるだけ無駄です。 ・@が1回ありその前後に文字がある。 ・ドメイン部分に連続しないピリオドが1回以上ある 程度調べればよいでしょう。 どうせ嘘をかいてくればチェックの意味はないのですから。

noname#102084
質問者

補足

回答ありがとうございます。 ご指摘いただいたことは私も承知しており、参考URLのほうも確認いたしました。 今回質問させていただいた内容は、個人的な学習として挑戦している部分が大きいと思います。 「メールアドレスのチェック」としておりますが、正規表現の書き方に関する質問としたほうがよかったですね。申し訳ありません。 引き続き、質問文にあるソースへのご指摘をお待ちしております。

関連するQ&A