56990


Rubyで空白のみの文字列だった場合、それを検知する方法がわかりません。  
調べてみても、空白を取り除く方法ばかりで、空白のみの場合はどうすれば良いでしょうか？

半角・全角に対応したいです。


CC BY-SA 4.0
2019-07-28T06:36:50.687
56974
2019-07-28T15:03:19.087
25223
question
ruby
Ruby 正規表現 空白のみを検知するには？


空白がいわゆる半角スペースと全角スペースの2種類であれば

[code]

    /\A[\x20\u3000]+\z/.match(str) 
    #または str.match(/\A[\x20\u3000]+\z/)
    #または str =~ /\A[\x20\u3000]+\z/
    
[/code]

これで判定できます。`\x20`は半角空白、`\u3000`は全角空白です。スペース1文字ならともかく、今回の場合は[ ]と書かないようにしましょう。

\Aは文字列の先頭、\zは文字列の末尾にマッチします。似たものに`^`
`$`がありますがこれは行頭行末にマッチします。「文字列全体」を検査したいときは`\A` `\z`を使いましょう。`^` `$`を使うとバグのもとです。

[code]

    /^[\x20\u3000]+$/.match("abc\n \ndef") # => #<MatchData " ">
    
[/code]

タブなど他の空白扱いされる文字にもマッチさせたい場合はPOSIX文字クラスの:blank:を使って

[code]

    /\A[[:blank:]]+\z/.match(str)
    
[/code]

こんな風にかけます。

[code]

    /\A[\s\u3000]+\z/.match(str) #半角の空白類文字+全角空白
    /\A[[:space:]]+\z/.match(str) #Unicode的空白文字全般
    
[/code]

こいつらは改行文字にもマッチします。

文字の意味についてはマニュアル読んでください。

<https://docs.ruby-lang.org/ja/latest/doc/spec=2fregexp.html>


CC BY-SA 4.0
2019-07-28T15:03:19.087
56990
2019-07-28T15:03:19.087
5793
56974
answer