• ベストアンサー

文字列チェックの動作がおかしい・・・

フォームのメールアドレスチェックで動作がおかしいです。 自分では、問題がないと思っているのですが、どこかおかしなところがあればご指摘ただければと思います。 動作確認を簡単にするために作ったソースは if(!ereg("^[0-9a-zA-Z\_\.\-\@]+$",'k_kkkk@kkkkk-kkkkk.com')) { print "NG1\n"; }else { print "OK1\n"; } if(!ereg("^[0-9a-zA-Z\_\.\-\@]+$",'kkkkk@kkkkk-kkkkk.com')) { print "NG2\n"; }else { print "OK2\n"; } if(!ereg("^[0-9a-zA-Z\_\.\-\@]+$",'k_kkkk@kkkkkkkkkk.com')) { print "NG3\n"; }else { print "OK3\n"; } if(!ereg("^[0-9a-zA-Z\_\.\-\@]+$",'kkkkk@kkkkkkkkkk.com')) { print "NG4\n"; }else { print "OK4\n"; } if(!ereg("[0-9a-zA-Z\_\.\-\@]+$",'k_kkkk@kkkkk-kkkkk.com')) { print "NG5\n"; }else { print "OK5\n"; } if(!ereg("[0-9a-zA-Z\_\.\-\@]+$",'kkkkk@kkkkk-kkkkk.com')) { print "NG6\n"; }else { print "OK6\n"; } if(!ereg("[0-9a-zA-Z\_\.\-\@]+$",'k_kkkk@kkkkkkkkkk.com')) { print "NG7\n"; }else { print "OK7\n"; } if(!ereg("[0-9a-zA-Z\_\.\-\@]+$",'kkkkk@kkkkkkkkkk.com')) { print "NG8\n"; }else { print "OK8\n"; } です。予想していた結果は、全てOKとなるはずだったのですが、予想に反して NG1 NG2 OK3 OK4 OK5 OK6 OK7 OK8 となり、マッチングパターン部分が「^[0-9a-zA-Z\_\.\-\@]+$」となっているときだけ、ハイフンが文字列に含まれていると、予想と違っています。 自分的には??なのですが・・・ どこがおかしいのか、ご指摘いただければと思います。 長文ですみません。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

試してみました。PHP4.3.9と4.3.10では同じ症状ですね。ちなみにpreg_match関数だとちゃんと動きます。アドレスチェックだけでしたらpreg_match関数で動くと思いますし、こちらの方が動作が速いそうです。

fedorars
質問者

お礼

レスありがとうございます。 preg_matchで行ったところ、問題なく動作しました。 ありがとうございました。 preg_matchだとデリミタも含めて、Perlでの正規表現と同じ書き方ができるので、私好みですね。 これからは、preg_matchを使うことにします。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

文字クラスの指定で\-(ハイフン)の指定がうまく認識できていないようです。 "^[-0-9a-zA-Z\_\.\@]+$" としたらウチの環境ではうまく行きました バグかもしれませんね。

fedorars
質問者

お礼

レスありがとうございます。 ご指摘の通り、ハイフンを文字クラスの最初に持って行った場合、うまく動作しました。 私の方のPHPのバージョンは、レンタルサーバで4.2.4devとなっていました。 他のサーバでも色々試してみたいと思います。 ありがとうございました。

関連するQ&A

専門家に質問してみよう