• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結)

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

このQ&Aのポイント
  • 「文字列に半角・全角スペースが入っているかをチェックする関数」の結果がおかしいです
  • 特定の文字列を入力すると、半角・全角スペースとして判定されてしまいます
  • 正しい結果を得るためにはどのようにすればいいでしょうか

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

  • ベストアンサー
  • g_p_
  • ベストアンサー率53% (28/52)
回答No.1

こんにちは、 コードをShift-JISで書かれているのではないですか? もしそうなら、下の様なコードを書かれているのと同じことになるのではないでしょうか。 #my $text = "メ"; my $text = "\x83\x81"; if( isSpace($text) ) {   print "スペースあり"; } else {   print "スペースなし"; } sub isSpace{   my $str = shift || return(undef);   #if( $str =~ /.*[\s ]+.*/ ){   if( $str =~ /.*[\s\x81\x40]+.*/ ){     return(1);   }else{     return(0);   } } 正規表現中に全角スペースを書かれていますが、こういった場合(というよりもマルチバイトな文字列を扱う際)には注意が必要ですね。

suffre
質問者

お礼

ありがとうございます! そうです、Shift-JISで書いています。 なかなか、文字コードとかって鬼門ですね・・・。 全角スペースは\x81\x40なのですね。ググってみたらいろいろ書かれていました。 どうも助かりました。感謝します!

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

「入出力には shift_jis (ないし CP932) を使う」という必然性があるとしても, それは「スクリプト内で shift_jis (ないし CP932) を使う」必然性にはならんよね. もっとも, スクリプト内で「文字」単位で処理するようにさえすれば shift_jis だろうと utf8 だろうと euc-japan だろうと問題ない.

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.3

> if( $str =~ /.*[\s ]+.*/ ){ 通常は全角文字を文字クラスに入れると、上位バイトと下位バイトに分けられて2つのバイト文字を入れたことになってしまいます。文字クラスを使わずに選択を使ったらどうでしょうか。 if ($str =~ /\s| /) {

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「スクリプトで使う (マルチバイト文字の) コード」を指定すればいいんだけどね.

suffre
質問者

お礼

ネットでみそもそも日本語使う時点でSJISは鬼門のようですね。 しかし携帯用サイトなのでSJISを使いたいのです。

関連するQ&A

専門家に質問してみよう