eregでの正規表現がうまくできません。。。

このQ&Aのポイント
  • 変数$aに複数の値を保存しているチェックボックスを再編集する際、関係ないチェックボックスもチェックされてしまう問題が発生しています。
  • 保存された値とチェックボックスのnameが一致する場合にのみチェックを入れる方法を探しています。
  • php.iniの設定やmb_ereg関数の使用に関連してエラーが発生しているため、他の解決策を求めています。
回答を見る
  • ベストアンサー

ereg での正規表現がうまくできません。。。

お世話になっております。 いま、変数$a に"PDCA,PDCB,1.3AE,漢字,カタカナ,カタカナ2"が入っているとします。 そこで、チェックボックスのnameとvalueもそれぞれ、PDCA,PDCB,1.3AE・・・と名前をつけています。 最初にこのチェックボックスに複数チェックを入れて、mysqlデータベースへひとつのカラムに保存します。そして、再編集ページで、保存した変数$aを読み込み、$aにチェックボックスのnameと同じ文字があったら、再編集ページを開いたときにはじめにチェックを入れておきたいのです。 例えば、PDCA,PDCB,カタカナ にチェックをいれて$aに"PDCA,PDCB,カタカナ"(コンマ含む文字列)として保存します。 そして、再編集ページの <input type "checkbox" name="a[]" multiple value="PDCA" <?php if(ereg("[$a]+,'PDCA')){print('checked');}?>>PDCA としています。php.ini mbstring.func_overload = 7にしていますので、日本語も大丈夫だと思うのですが。(mb_eregを使うとなぜかエラーとなる) 例のようにすると、関係ないチェックボックスもチェックされていたりでたらめです。何かいい手はないでしょうか。よろしくお願いいたします。

  • PHP
  • 回答数1
  • ありがとう数1

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

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

正規表現のパターンとして[]を使うと文字クラスを指定したことになります。 なので、でたらめになるように思えるのでしょう。 $a="PDCA,PDCB,1.3AE,漢字,カタカナ,カタカナ2"; のようになっているならむしろ if(ereg("PDCCA",$a)){print('checked');} のようにするべきかも。 というか、単に文字列が含まれているか調べるには、 strstrでも良いような気がします。 $aが配列なら join($a,",")とかしてから調べれば良いですね。

tomofriend
質問者

お礼

いつも本当にありがとうございます。 おかげさまで、自分の作ったシステム(簡単ですが)なんとか、稼働させることができました。 今回は、悩んだあげく、それぞれをカラムに入れることにしました。(スマートじゃないですが・・・) ありがとうございました!

関連するQ&A

  • 記号[]が混ざった正規表現について

    いつも、お世話になります。 文字列:<textarea name="[top]">abcde</textarea> から、abcde のみを抽出したくて <?php $a = "<textarea name=\"[top]\">abcde</textarea>"; mb_ereg("<textarea name=\"[top]\">(.*)</textarea>",$a,$b); print "$b[1]"; ?> としましたが、抽出されません。 "[" の表現に関係があると思います。 正規表現について教えてください。

    • ベストアンサー
    • PHP
  • 記号()が混ざった正規表現について

    さらに、申し訳ありません。 文字列:<textarea name="sss1" cols="100" rows="12" onClick="FormName(this)">abcde</textarea><textarea name="sss2" cols="100" rows="12"></textarea> から、 abcde を抽出したく、 下記のようにコーディングしましたが、 abcde</textarea><textarea name="sss2" cols="100" rows="12"> になってしまいます。 正規表記のコーディングを教えてください。 よろしくお願いします。 <?php $a = "<textarea name=\"sss1\" cols=\"100\" rows=\"12\" onClick=\"FormName(this)\">abcde</textarea><textarea name=\"sss2\" cols=\"100\" rows=\"12\"></textarea>"; mb_ereg("<textarea name=\"sss1\" cols=\"100\" rows=\"12\" onClick=\"FormName(this)\">(.*)</textarea>",$a,$b); print "$b[1]"; ?>

    • ベストアンサー
    • PHP
  • c#の正規表現がうまくいきません

    c#の正規表現がうまくいきません 以下のhtmlから指定の文字列を抜き取ります(htmlは適当です) ---------------------------------------- <select class="iiy_name_list"> <option value="1347">abc</option> </select></td> <select class="sug_name_list"> <option value="761">def</option> </select></td> ---------------------------------------- 2行目の"abc"、5行目の"def"の2つをキャプチャで得たいのですが、 @"<option\s+[^>]*>(.*)</select>",という指定では5行目の"def"しか得られません forを使って2回のループで一つ目の変数に"abc"二つ目の変数に"def"を入れるには どうしたらよいのでしょうか? 以下のページを参考にしたのですが、うまくいきません… http://uchukamen.com/Programming1/RegEx/index.htm よろしくお願いします。

  • JavaScriptの正規表現について

    お世話になります。 HTMLでテキストに入力された数値のチェックを下記のようにJavaScriptで行っています。 ---------------------------------------------------------  function check_num(obj) {')   obj_w = document.form_name.elements[obj];')   if(obj_w.value.match(/^\d{0,1}(\.\d{1,3})?$/)){    return 0;   else{    alert("測定値は整数部分1桁、小数部分3桁までの正の数値を入力して下さい。")    obj_w.focus();    return 1;   }  } ----------------------------------------------------------- このとき、チェックする整数部分、小数部分の桁数を変数にして汎用性のある関数にしたいのですが、正規表現のなかで変数を使うにはどのようにしたらよいのでしょうか? よろしくお願い致します。

  • フォームからsubmitをした後再読込させない

    ほぼ初心者でフォームからの申込みを作っています 現在 <form name="a11" action="/products/detail.php" method="post" > <input type="hidden" name="mode" value="cart" /> <input type="hidden" name="product_id" value="137" /> <input type="hidden" name="product_class_id" value="634" /> <input type="checkbox" name="quantity" value="1" /><br /> <input type="submit" value="受講する" onClick="alert('カゴに入れました');value='受講する'" /> </form> というフォームが数十個あるのですが、 一つチェックボックスにチェックを入れて送信するとページの再読み込みがされて チェックボックスのチェックが消えてしまいます どのチェックボックスにチェックを入れたかは残したまま、次のsubmitを押させたいのです 申込み者がどのフォームにチェックを入れて送信をしたかを見れるようにして 次のページに飛ばしたいのです どうかご教授願います HTMLの項目で質問させていただきましたが、JavaScriptのプログラム例など 併せてご教授いただけますと助かります どうぞよろしくお願いいたします

  • チェックボックスから複数のvalueを取り出す

    HTMLフォームから、action="file.php"でデータの受け渡し→PHPで送られてきたvalueに応じて文章を出力、というプログラムを作っています。 例: グループAのラジオボタン1にチェック、送信 →グループAで押されたラジオボタンを送信されたvalueで判別、この場合はvalue==A →value==Aの場合に表示する文章を変数に受け渡し、その変数で表示 ラジオボタン、テキストボックスのvalueは$_POST['XXX']で取り出せたのですが、チェックボックスのデータだけが取り出せません。こちらの質問を検索したとき、多次元配列という言葉を見かけたのですが、いまいちよく分かりませんでした。 チェックボックスの複数のvalueで、上記の例のような動きを実現させるにはどうしたらいいでしょうか。どなたかご教授ください。

    • ベストアンサー
    • PHP
  • ereg_replaceの文字化けについて

    宜しくお願いします。 PHPで文字列の置き換えをする関数の『ereg_replace』についてですが、この関数を使う変数に『'』がはいると、置き換え後にその『'』の前に『\』が付いちゃうんですが、これを回避する方法は無いでしょうか?ちなみに、文字化けするソースを明記させて頂きます。 $title_edit = ereg_replace("/\x0D\x0A|\x0D|\x0A/","<br>","${title}"); 入力フォームでtextareaで入力された項目が$titleに入るのですが、textarea内でエンター改行した場合に、その改行コードをHTML上の<BR>タグに置き換えるというものなんですが、これを行うと、『'』の前に『\』が入ってしまうのです。原因が良く判らないで困っています。 お願いします!教えて下さい!!

    • ベストアンサー
    • PHP
  • 正規表現について

    人名を漢字、平仮名、アルファベットでカンマ区切りでcsvファイルに保存したものがあるとします。 それで例えば、平仮名で一番初めが「あ」の人だけを表示させたいプログラムを書きたいのですがなかなかうまくいきません。 正規表現の使い方もいまいちわかっていなく、とりあえず全て平仮名かどうか調べるプログラムを、 http://phpspot.net/php/pg%90%B3%8BK%95%5C%8C%BB%81F%82%B7%82%D7%82%C4%82%D0%82%E7%82%AA%82%C8%82%A9%82%C7%82%A4%82%A9%92%B2%82%D7%82%E9.html のサイトからコピーして作成してみたのですが、表示されませんでした。 以下が作成したものです。 <?php $handle = fopen("csv.csv", "r"); if ($handle) { while (!feof($handle)) { $buffer = fgets($handle, 4096); list($kanji,$hiragana,$alphabet) = explode(",", $buffer); if(mb_ereg("^[あ-ん]+$",$hiragana)){ $output .= "$kanji<BR>\n"; } } } fclose($handle); echo $output; ?> もし出来ましたら、先頭が「あ」だけを表示する正規表現の表し方なども教えていただけると助かります。 お願いします。

    • ベストアンサー
    • PHP
  • チェックボックスの値を変数に (checkbox)

    ASP から以下のようなタグを吐き出させページに複数個 表示させました。 <FORM name = "mail_to_win"> <INPUT type="checkbox" name="mail[1]" value="A" > <INPUT type="checkbox" name="mail[2]" value="B" > <INPUT type="checkbox" name="mail[3]" value="C" >  ・  ・  ・ これを、JavaScript で参照、または変数に格納したいと 思います。 そこで以下のように書いたのですが、 alert(document.mail_to_win.mail[1].defaultValue); a = document.mail_to_win.mail[1].defaultValue; 「エラー'document.mail_to_win.mail'はオブジェクト ではありません。」 というエラーが出てしまいます。 実は配列に取り込みたいので、大量のチェックボックス にNo.をつける必要があります。 チェックボックスの値をJavaScriptの配列変数に 格納するにはどうしたらいいのでしょうか。

  • 同一ページの複数フォームを一括送信したい

    会社にてあるイベントの申込みページを作成している、ほぼ初心者です。 ショッピングカートへとフォームから飛ばしたいのですが、プログラムがよくわからず行き詰っています。 以前の回答にもあったhttp://okwave.jp/qa/q3418439.htmlを真似て作ってみましたが、 最初のものだけをピックアップして実行されてしまいます また、本来はチェックボックスにチェックが入っているもののみを送信したいんです </style> <script language="javascript"><!-- function send() { document.a11.submit(); document.b11.submit(); ・ ・ ・ ・ } //--></script> これをヘッダー内に書き込み <form name="a11" action="/products/detail.php" method="post" target="_blank"> <input type="hidden" name="mode" value="cart" /> <input type="hidden" name="product_id" value="137" /> <input type="hidden" name="product_class_id" value="634" /> <input type="checkbox" name="quantity" value="1" /><br /> </form> <form name="b11" action="/products/detail.php" method="post" target="_blank"> <input type="hidden" name="mode" value="cart" /> <input type="hidden" name="product_id" value="140" /> <input type="hidden" name="product_class_id" value="637" /> <input type="checkbox" name="quantity" value="1" /><br /> </form> ・ ・ ・ ・ ・ というフォームが数十個あります。 数十個あるうちのチェックボックスにチェックが入っているもののみを 送信したいのですが、プログラムの組み方をご教授願えませんでしょうか? 順番としては (1)チェックボックスにチェックが入っているものを認識 (2)チェックボックスにチェックが入っているものを順に送信 という感じなのかなと考えていろいろ調べてみたのですが、 わからない状態です ほぼ初心者なので、お手数ですが、サンプル記述などもいただけると 大変たすかります どうぞよろしくお願いいたします

専門家に質問してみよう