- ベストアンサー
文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結果
- 「文字列に半角・全角スペースが入っているかをチェックする関数」の結果がおかしいです
- 特定の文字列を入力すると、半角・全角スペースとして判定されてしまいます
- 正しい結果を得るためにはどのようにすればいいでしょうか
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは、 コードを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); } } 正規表現中に全角スペースを書かれていますが、こういった場合(というよりもマルチバイトな文字列を扱う際)には注意が必要ですね。
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
「入出力には shift_jis (ないし CP932) を使う」という必然性があるとしても, それは「スクリプト内で shift_jis (ないし CP932) を使う」必然性にはならんよね. もっとも, スクリプト内で「文字」単位で処理するようにさえすれば shift_jis だろうと utf8 だろうと euc-japan だろうと問題ない.
- kumoz
- ベストアンサー率64% (120/185)
> if( $str =~ /.*[\s ]+.*/ ){ 通常は全角文字を文字クラスに入れると、上位バイトと下位バイトに分けられて2つのバイト文字を入れたことになってしまいます。文字クラスを使わずに選択を使ったらどうでしょうか。 if ($str =~ /\s| /) {
- Tacosan
- ベストアンサー率23% (3656/15482)
「スクリプトで使う (マルチバイト文字の) コード」を指定すればいいんだけどね.
お礼
ネットでみそもそも日本語使う時点でSJISは鬼門のようですね。 しかし携帯用サイトなのでSJISを使いたいのです。
お礼
ありがとうございます! そうです、Shift-JISで書いています。 なかなか、文字コードとかって鬼門ですね・・・。 全角スペースは\x81\x40なのですね。ググってみたらいろいろ書かれていました。 どうも助かりました。感謝します!