• 締切済み

PHPの正規表現eregの使い方

PHP初心者です。 eregを使った入力チェックをしたいのですが、思うように処理できません。 入力は半角英数字のみを受け付け、その他の入力の場合はエラー処理を行いたいと思ってます。 if (!ereg("^[0-9]+$", $user)) { // 半角英数字以外はエラー処理 } 参考のものがあったのでその通りやってみましたが、全角文字も受け付けてしまい困っています。 記号の意味もよくわかりません。 また、これに加え5文字以上8文字以内という条件も付けたいです。 よろしくお願い致します。

みんなの回答

  • limit004
  • ベストアンサー率33% (3/9)
回答No.1

if(!ereg("[0-9a-zA-Z]",$user)){ //エラー処理 } 以上で半角英数字以外となるはずです。 「^」が~以外という意味なので2重否定になります。 そのせいで全角が可能になってるのかもしれません。 また、5文字以上8文字以内の条件はstrlen関数を使用した方がいいと思います。 以下実装バージョン。 if(!ereg("[0-9a-zA-Z]",$user) || strlen($user) > 8 || strlen($user) < 5){ //エラー処理 } せっかくですので私がよく使うサイトも紹介しておきます。

参考URL:
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sak3php.htm
stupid_honey
質問者

お礼

回答ありがとうございます。 文字数制限はstrlenを使用し対処できましたが、やはりeregのチェックで全角文字も通ってしまいます。

stupid_honey
質問者

補足

もう一度、試行錯誤しながらやったところ出来ました。 if (ereg("[^0-9a-zA-Z]",$user)) { //エラー処理 } これで出来ました。 でも!eregで否定しているのと意味的に一緒のような気がしますけど。 ありがとうございました。