19

だから私はルビーでそのx.nilを知っていますか?xがnullかどうかをテストします。

xが''、''(2つのスペース)、または''(3つのスペース)などに等しいかどうかをテストする最も簡単な方法は何ですか?

基本的に、変数がすべて空白であるかどうかをテストするための最良の方法は何でしょうか。

4

7 に答える 7

34

Rails を使用している場合は、次のように簡単に使用できます。

x.blank?

これは、x が nil の場合に安全に呼び出すことができ、x が nil またはすべての空白の場合に true を返します。

Rails を使用していない場合は、activesupportgem から入手できます。でインストールしgem install activesupportます。ファイルrequire 'active_support/core_extで、基本クラスのすべてのアクティブなサポート拡張機能を取得するかrequire 'active_support/core_ext/string'、クラスの拡張機能のみを取得しStringます。いずれにせよ、blank?メソッドはrequireの後に利用可能になります。

于 2010-03-25T19:09:18.203 に答える
25

「最良」は文脈によって異なりますが、ここでは簡単な方法を示します。

some_string.strip.empty?
于 2010-03-25T19:07:42.607 に答える
15
s =~ /\A\s*\Z/

正規表現ソリューション。これが短いルビー正規表現チュートリアルです。

于 2010-03-25T18:47:32.923 に答える
6

xがすべて空白の場合x.strip、は空の文字列になります。だからあなたはすることができます:

if not x.nil? and x.strip.empty? then
    puts "It's all whitespace!"
end

または、正規表現を使用すると、がすべて空白文字x =~ /\S/である場合にのみfalseが返されます。x

if not (x.nil? or x =~ /\S/) then
    puts "It's all whitespace!"
end
于 2010-03-25T18:46:59.467 に答える
0

spaces?あなたのコメントに基づいて、Stringクラスを拡張し、次のようにメソッドを定義できると思います 。

$ irb
>> s = " "
=> " "
>> s.spaces?
NoMethodError: undefined method `spaces?' for " ":String
    from (irb):2
>> class String
>>     def spaces?
>>         x = self =~ /^\s+$/
>>         x == 0
>>     end
>> end
=> nil
>> s.spaces?
=> true
>> s = ""
=> ""
>> s.spaces?
=> false
>> 
于 2010-03-25T18:56:38.370 に答える
-1
a = "  " 

a.each_byte do |x|
  if x == 32
    puts "space"
  end
end
于 2010-03-25T18:45:56.380 に答える
-1

さらに別:)string.all? { |c| c == ' ' }

于 2010-03-26T04:54:16.270 に答える