文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結果?
下記コードのように「文字列に半角・全角スペースが入っているかをチェックする関数」を作りました。
$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 = "メ";
とするとスペースが入っているという結果になってしまいます。
なぜ「メ」が入ると半角もしくは全角のスペースとみなされてしまうのでしょうか?
また、どうすれば正しくチェックできるようになりますか?
よろしくお願いします。
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);
}
}
正規表現中に全角スペースを書かれていますが、こういった場合(というよりもマルチバイトな文字列を扱う際)には注意が必要ですね。
ありがとうございます!
そうです、Shift-JISで書いています。
なかなか、文字コードとかって鬼門ですね・・・。
全角スペースは\x81\x40なのですね。ググってみたらいろいろ書かれていました。
どうも助かりました。感謝します!
No.4
- 回答日時:
「入出力には shift_jis (ないし CP932) を使う」という必然性があるとしても, それは「スクリプト内で shift_jis (ないし CP932) を使う」必然性にはならんよね.
もっとも, スクリプト内で「文字」単位で処理するようにさえすれば shift_jis だろうと utf8 だろうと euc-japan だろうと問題ない.
No.3
- 回答日時:
> if( $str =~ /.*[\s ]+.*/ ){
通常は全角文字を文字クラスに入れると、上位バイトと下位バイトに分けられて2つのバイト文字を入れたことになってしまいます。文字クラスを使わずに選択を使ったらどうでしょうか。
if ($str =~ /\s| /) {
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Excel(エクセル) 【マクロ】フォルダを2つのモニターの定位置に並べたい 2 2022/09/02 01:14
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Visual Basic(VBA) 指定列最終行までのスペースを改行するVBAについて 2 2022/06/01 19:50
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Excel(エクセル) 【マクロ】フォルダを3つ、POモニター上に、決まった並べ方をしたい 4 2022/08/31 11:05
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
- その他(Microsoft Office) 英数字のみ全角から半角に変換 4 2023/07/28 14:48
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
大文字と全角文字は同じ意味で...
-
住宅にカナを入力する際に丁目...
-
全角英数字の必要性が理解できない
-
差し込み印刷について教えてく...
-
全角チルダと波ダッシュに関す...
-
ExcelVBA バイナリファイルの全...
-
全角入力
-
VBでのカナの自動入力方法について
-
全角スペース
-
掲示板で全角の英字はなぜいけ...
-
明細書の英数字の全角・半角に...
-
「 _ _ 」の正式名称を...
-
ACCESS:半角、全角空白スペース...
-
.NET3.5におけるキーボードの「...
-
LaTeXで半角カンマと全角カンマ...
-
splitでほしいものが消えてしま...
-
VBAで“ダブルクォート”の表示
-
エクセルにMicrosoft Barcode C...
-
全角英数字を半角英数字に変換...
-
word差し込み印刷 半角カタカ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
英数字のみ全角から半角に変換
-
VBA 文字に半角が含まれて...
-
エクセルにMicrosoft Barcode C...
-
全角英数字の必要性が理解できない
-
IEからEdgeへの移行に伴うIMEの...
-
住宅にカナを入力する際に丁目...
-
プログラミングでは、半角括弧...
-
COBOL・全角判定
-
VB.net、テキストボックス入力...
-
word差し込み印刷 半角カタカ...
-
全角入力
-
Accessのテキストボックスの入...
-
VBで、String型のデータが、...
-
char型全角数字から、int型半角...
-
よくアカウント等に使われる 半...
-
[VBScript]バイト長の判定
-
全角チルダと波ダッシュに関す...
-
封筒の宛先で縦書きの書き方
-
Accessでのグループ化で全角・...
-
CString Format にて全角空白文...
おすすめ情報