質問: Rubyで空白のみの文字列だった場合、それを検知する方法がわかりません。 調べてみても、空白を取り除く方法ばかりで、空白のみの場合はどうすれば良いでしょうか? 半角・全角に対応したいです。
回答: 空白がいわゆる半角スペースと全角スペースの2種類であれば ``` /\A[\x20\u3000]+\z/.match(str) #または str.match(/\A[\x20\u3000]+\z/) #または str =~ /\A[\x20\u3000]+\z/ ``` これで判定できます。`\x20`は半角空白、`\u3000`は全角空白です。スペース1文字ならともかく、今回の場合は[ ]と書かないようにしましょう。 \Aは文字列の先頭、\zは文字列の末尾にマッチします。似たものに`^` `$`がありますがこれは行頭行末にマッチします。「文字列全体」を検査したいときは`\A` `\z`を使いましょう。`^` `$`を使うとバグのもとです。 ``` /^[\x20\u3000]+$/.match("abc\n \ndef") # => # ``` タブなど他の空白扱いされる文字にもマッチさせたい場合はPOSIX文字クラスの:blank:を使って ``` /\A[[:blank:]]+\z/.match(str) ``` こんな風にかけます。 ``` /\A[\s\u3000]+\z/.match(str) #半角の空白類文字+全角空白 /\A[[:space:]]+\z/.match(str) #Unicode的空白文字全般 ``` こいつらは改行文字にもマッチします。 文字の意味についてはマニュアル読んでください。