• 締切済み

ereg 処理で行き詰ってます

mb_eregでの処理がどうもうまくいかず、助言していただければ幸いです。 $ageに10代や20代といった変数が入っています。 if(mb_ereg('0代$',$age)){ $age = mb_ereg_replace('0代$',"?",$age); } という感じで語末を1?や2?に変更したいのですが、うまく動いてくれません。 また、eregでの処理なのですが下記のように if(!ereg('[0-9\?]',$FORM[age])){ Error_Msg("入力された年齢の書式が間違っています"); } if(ereg('\?$',$FORM[age])){ $FORM[age] = ereg_replace('\?$',"0代",$FORM[age]); } としているのですが、20代や30代と直接入力した場合でもError処理されず通ってしまいます。 0~9、?以外の文字が入力された場合にError処理させるにはどうすればいいでしょうか?

みんなの回答

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

動作した時のテストは以下の様にしました。 $age="20代"; if(mb_ereg('0代$',$age)){ $age = mb_ereg_replace('0代$',"?",$age); } これが、ある環境で動いて、ある環境では動かないということは、 バージョンの違いなのかなとも思いますが、 それより、やはり実データの$ageの中身にゴミが入っていてマッチしないということになっているのではないかと思います。 一度上記のような他に余地のないデータでテストしてみられたらどうでしょうか このテストでダメなら、逆にphpの方に問題があると言えると思います。

noname#56568
質問者

お礼

度々回答ありがとうございます。 単独でテストすると動きますが、組み込んだ状態で動かすと反映されません。 ゴミが入っていない事は確かなのですが、一応正規表現の検索から$をはずしたりしても変わりなく…。 他人が組んだプログラムなので、何が悪戯をしているのか調べるのも一苦労…。 全部組み直す方法を取ろうかと思います。 ありがとうございました。

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

if(mb_ereg('0代$',$age)){ $age = mb_ereg_replace('0代$',"?",$age); } は、そのままで、うまく動きました。 $ageは本当に10代や20代の文字列が入っているのでしょうか? また、$FORM[age]と$ageは違うものなのですか? if(!ereg('[0-9\?]',$FORM[age])){ は if(!mb_ereg('^[0-9]\?$',$FORM[age])){ でどうでしょうか?

noname#56568
質問者

お礼

回答ありがとうございます。 うまく動きましたか…。 動作テスト用のローカルサーバーが原因かと思いまして、違うサーバーでも試したのですが、結果は同じでした。(泣) $ageの中に10代~90代までのデータが入っている事は確かです。 実際は配列で読み出しているので$Read[age]になっていますが、特に違いはないと思い$ageに書き換えて投稿しました。 $FORM[age]につきましても配列処理し、そこから読み出して書き換える処理をしています。 入力時の処理についてもmb_eregにしてみましたが…、挙動変わらず…。 何が原因なのかサッパリです。 PHPのVerはローカルが4.3.10、企業が4.2.2です。 もう少し原因を探ってみます。 何かお気づきの点ありましたらお教え下さると助かります。

関連するQ&A