• 締切済み

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

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

  • Perl
  • 回答数4
  • ありがとう数0

みんなの回答

  • 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

  • 文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結

    文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結果? 下記コードのように「文字列に半角・全角スペースが入っているかをチェックする関数」を作りました。 $textに入る文字列に半角・全角のスペースが入っているかをチェックします。 -------------------------------------------- my $text = "東 京"; if( isSpace($text) ) {   print "スペースあり"; } else {   print "スペースなし"; } sub isSpace{   my $str = shift || return(undef);   if( $str =~ /.*[\s ]+.*/ ){     return(1);   }else{     return(0);   } } -------------------------------------------- しかしなぜか1行目を my $text = "メ"; とするとスペースが入っているという結果になってしまいます。 なぜ「メ」が入ると半角もしくは全角のスペースとみなされてしまうのでしょうか? また、どうすれば正しくチェックできるようになりますか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • テキストファイル内の半角スペースの削除

    よろしくお願いします。 OS:Windows Server 2003,Windows 2000 Server MS-DOSコマンドによるバッチで、あるテキストファイル(.txt)内 を検索し、半角スペースがあった場合は半角スペースを 削除するというものを検討中です。 あるテキストファイルには、「Dir /s /a <ディレクトリパス>」(★) の結果が出力されています。 ※http://okwave.jp/qa2630050.htmlの「その他問題点」の  回避手段を考えています。 http://www.fpcu.jp/dosvcmd/bbs/log/cat3/cat54/4-0515.htmlを 参考にし下記のようにバッチを組みましたが、★の結果から 半角スペースを削除した内容になりません。 ------- set infile=%1 set outfile=%2 for /f "delims=" %%A in (%infile%) do call :sub "%%A" goto :eof :sub set STR=%~1 set STR=%STR: =% echo.%STR%>>%outfile% ------- 何がまずいのでしょうか? <DIR>という文字列を含んでおり、"<" や ">" を考慮する 必要がある気はしていますが、どのように修正すればよいか、 なかなかうまくいきません。 修正点やアドバイスをいただけると幸いです。

  • C言語 strcmp 半角スペースがあるとだめ?

    C言語 strcmp 半角スペースが文字列に含まれている場合 文字列の比較がうまくいきません。半角スペースがあると比較できないのでしょうか? プログラム //strcmp #include <stdio.h> #include <string.h> int main(void){ char input[256]; char str[] = "HelloWorld!";   //char str[] = "Hello World!";だとうまくいかない。 printf("%s\n>", str); scanf("%s", input); if ( strcmp(input, str) == 0){ printf("同じです。\n"); }else{ printf("違います。\n"); } return 0; }

  • 半角全角スペースの削除(先頭&末尾)

    やまとです。 ある文字列の先頭と末尾のスペースを取り除きたいのですが、 どのようにしたら良いでしょうか? 事前に試した事が2つあります。 1.trim を使用する。  $aiueo = " あいうえ お "; $aiueo = trim($aiueo));  とすると、スペースが削除されます。  しかし、これでは全角のスペースが削除されないようですね。 2.置換する。  $aiueo = " あいうえ お ";  $aiueo = str_replace( ' ', '', $aiueo );  とすると、全角のスペースが削除されます。  しかし、文字列の先頭と、末尾以外の全角スペースも削除されてしまう  ようですね。 では、文字列の先頭と末尾の半角スペースと全角スペースを削除したい場合は どのようにしたら良いでしょうか? ご教授願います。

    • ベストアンサー
    • PHP
  • JacaScriptのスペース削除について

    JavaScriptのスペース削除についての質問です。以下のコードで、入力された値が空白又はAllブランクだった時の処理をしています。ここに、前後に全角半角スペースが入力された場合は、それを削除する、という処理を入れたいので、以下のようにしています。 /*(1)*/function trim(nameTXT) { return nameTXT.replace(/^[ \t\r\n]+|[ \t\r\n]+|[ \t\r\n]+|[ \t\r\n]+$/g, ""); } // 未入力またはスペース入力時のアラート及びフォーカス処理関数 function check() { var nameTXT = document.formMerchandise.name.value; if(trim(nameTXT).match(/ |\s+/)||trim(nameTXT)==""){ alert("商品名を入力してください"); document.formMerchandise.name.focus(); return false; } if(trim(nameTXT)>25){ alert("商品名は25文字までです"); document.formMerchandise.name.focus(); return false; } return true; } ネットを参考にしながらではあるのですが、(1)で自作メソッドを作成し、その中で「受け取った文字の前後にある全角半角スペースを削除して戻す」という処理を実装してみました。半角スペースに関しては期待通りの処理を行えたのですが、全角スペースに関しては削除されず、文字として認識されてしまっています。 例えば (半角スペース) " 商品名 "→"商品名" (全角スペース) " 商品名 "→" 商品名 " となってしまいます。半角スペースが削除されているので後少しとは思うのですが、どなたか教えて頂けないでしょうか?よろしくお願い致します。

  • 全角スペースを半角スペースに変換

    $str = mb_convert_kana($usersearch, "s", "EUC-JP"); $usersearch= $_POST['usersearch']; 上記のソースを記述し、htmlのテキストボックス(usersearch)内にある全角スペースを半角にしようと試みるのですが、上手く変換されません。何か解決策はないでしょうか?? 全体的にはこのようなソースです。 $search_query = "select * from kensaku2"; $str = mb_convert_kana($usersearch, "s", "EUC-JP"); $usersearch= $_POST['usersearch']; $clean_search = str_replace(',', ' ', $usersearch); $search_words = explode(' ', $clean_search); $final_search_words = array(); if (count($search_words) > 0) { foreach ($search_words as $word) { if (!empty($word)) { $final_search_words[] = $word; } } } // Generate a WHERE clause using all of the search keywords $where_list = array(); if (count($final_search_words) > 0) { foreach($final_search_words as $word) { $where_list[] = "syou LIKE '%$word%'"; } } $where_clause = implode(' AND ', $where_list); // Add the keyword WHERE clause to the search query if (!empty($where_clause)) { $search_query .= " WHERE $where_clause"; } よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Javascript 全角カナ+半角スペース+全角スペースの正規表現について

    初歩的な質問をしてすみません。 一応、自分でも試行錯誤で if (str.match(/[^ア-ンー\- ]+/g)){ alert("フリガナの項目を「全角カタカナ」のみで入力して下さい。"); } という条件を作ってみたのですが、半角スペースを入力したらTrueとなってしまいます。 全角カナ+半角スペース+全角スペース以外はFalseとなる正規表現を教えていただけないでしょうか。 以上、よろしくお願いします。

  • 指定数ごとにスペースを入れる正規表現

    10文字以上続く半角英数の場合、指定数ごとにスペースを入れるのはどう記述すればよいのでしょうか? 内容は、 $str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; $str2 = "ABCDEFGHI JKLMNOPQR STUVWXYZ"; $str3 = "あいうえおかきくけこさしすせそ"; という文字列があり 10文字以上続く半角英数なら5文字ごとにスペースを入れるようにしたいのです。 $str1は10文字以上半角英数が続くので、5文字ごとにスペースを入れて 『ABCDE FGHIJ KLMNO PQRST UVWXY Z』 と出力。 $str2は10文字以上続かないのでそのまま出力 $str3は半角英数ではないのでそのまま出力 としたいのですが この場合どのように記述すればよいのでしょうか? ご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • 半角・全角スペースチェック

    エクセルのVBAで質問です。 現在、仕事でデータのコンバートの作業をしています。 送られてくるデータはTXTもしくはCSVなのです。 それを決められたフォーマットに加工しています。 それで現在、置換やオートフィルタの組み合わせで行っている作業を 自動化できないかと思い質問させていただきます。 氏名を 性 名としたいのですが、姓と名の間に半角スペースとしたいのです。 ただ、送られてくるデータが全角スペースだったり、 半角スペースが3つあったりとバラバラの状態です。 なのでいつもは置換で半角スペースに変えながら、 オートフィルタで半角スペースひとつを含まないものを出して 修正している状態です。 VBAでこれらをチェックし、自動修正することは可能でしょうか? よろしくおねがいします。

  • スペースの削除ができません

    Perl初心者です。教えていただきたいことがあります。 CGIですが、HTMLのフォーム(テキストボックス)に名前を入力してもらうような場合に、名字と名前の間にスペースがあったりなかったりする状態が混在するのを避けるため、すべてスペースなしで値を受け取りたいと考えています。 仮に、"NAME"というテキストボックスとした場合、 $FORM{'NAME'} =~ s/ //g; $FORM{'NAME'} =~ s/ //g; このようにすれば、半角・全角スペースを削除できると思うのですが、どういうわけか動きません。スペースが入ったままで値が返ります。 ちなみに、CGIのファイルはEUCにしているのですが、なぜかSJISにすると動きます。ただ、SJISにすると別の支障があるのでできません。 情報が不足しているかもしれませんが、原因の検討がつきません。どなたが、考えられる原因をご指導いただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Perl