電子書籍の厳選無料作品が豊富!

半角スペースを一度削除してから禁止語句などがないかチェックし、
その後、半角スペースなどが入っている場合、元状態に戻したいと思います。
以下のように記述することで半角スペースを削除してから
チェックはできると思うのですが、
それを元の状態に戻すということは不可能でしょうか?

$str =~ s/[\s ]+//g
if($str =~ /バカ/){
push(@error, 'バカと投稿はできません');
}

A 回答 (4件)

>#4さま



ご指摘ありがとうございます。
思いっきり PHP ですね・・・

考え方だけ参考にしていただけたらと。
    • good
    • 0

既に他の回答にあるように, 半角スペースを削除した文字列を別に作って


・削除した文字列を使って「禁止語句など」のチェックを行う
・「禁止語句など」がなければ, 以降の処理では削除する前の文字列を使う
のが簡単かと. 「禁止語句などをチェックする」サブルーチンを作ってやればよいでしょう.

ただ, 動作検証をするまでもなくそれが「Perl」で動くとは思えないんですが>#2.
    • good
    • 0

以下のようなのはいかがでしょう。


元の状態に戻す・・・というか、$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);
}
    • good
    • 0

if( $str=~/バ[\s ]*カ/ ){


バとカの間に、半角もしくは全角スペースが0文字以上ある場合に真。
0文字以上なので、スペース無しでも引っ掛かる。

スペースを消してしまうと復元出来ませんから、上記みたいに入ったままでチェックするか、削除用変数にコピーしてコピーしたものに対してスペース削除を行い、投稿可能であれば、コピー元の文字列を投稿文字列として使うしかないと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!