• 締切済み

半角スペース削除について

半角スペースを一度削除してから禁止語句などがないかチェックし、 その後、半角スペースなどが入っている場合、元状態に戻したいと思います。 以下のように記述することで半角スペースを削除してから チェックはできると思うのですが、 それを元の状態に戻すということは不可能でしょうか? $str =~ s/[\s ]+//g if($str =~ /バカ/){ push(@error, 'バカと投稿はできません'); }

みんなの回答

  • blanc210
  • ベストアンサー率55% (5/9)
回答No.4

>#4さま ご指摘ありがとうございます。 思いっきり PHP ですね・・・ 考え方だけ参考にしていただけたらと。

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

既に他の回答にあるように, 半角スペースを削除した文字列を別に作って ・削除した文字列を使って「禁止語句など」のチェックを行う ・「禁止語句など」がなければ, 以降の処理では削除する前の文字列を使う のが簡単かと. 「禁止語句などをチェックする」サブルーチンを作ってやればよいでしょう. ただ, 動作検証をするまでもなくそれが「Perl」で動くとは思えないんですが>#2.

すると、全ての回答が全文表示されます。
  • blanc210
  • ベストアンサー率55% (5/9)
回答No.2

以下のようなのはいかがでしょう。 元の状態に戻す・・・というか、$str は加工されないので以降も元の状態で使えます。 禁止ワードは複数個あるでしょうし、区切り文字も半角スペースだけ考慮すればよい わけではないでしょうのでそれぞれ複数指定できるように。 ※動作検証はしていませんが概ねこんな感じ、ということで・・・。 $error = checkKinshiWord($str); if($error){ echo 「".$error."」と投稿することはできません。"; }else{ echo "禁止文字列は含まれません。"; } // $str は元の状態のままです echo $str; function checkKinshiWord($str){ // 禁止ワードの配列 $kinshi = array("あい", "うえお", "かきくけこ"); // 区切り文字の配列 $sep = array(" ", " ", ",", "・"); // 検出された禁止ワード $error = array(); // 区切り文字を削除した文字列 $doc = str_replace($sep, $str); foreach($kinshi as $k => $v){ // $doc 中に $v があるかどうかのチェック処理 // あれば if(){ $error[] = $v; } } return implode(', ', $error); }

すると、全ての回答が全文表示されます。
  • unacyo
  • ベストアンサー率51% (35/68)
回答No.1

if( $str=~/バ[\s ]*カ/ ){ バとカの間に、半角もしくは全角スペースが0文字以上ある場合に真。 0文字以上なので、スペース無しでも引っ掛かる。 スペースを消してしまうと復元出来ませんから、上記みたいに入ったままでチェックするか、削除用変数にコピーしてコピーしたものに対してスペース削除を行い、投稿可能であれば、コピー元の文字列を投稿文字列として使うしかないと思います。

すると、全ての回答が全文表示されます。

関連するQ&A