Самый простой способ проверить только пробелы в ruby - PullRequest
17 голосов
/ 25 марта 2010

Итак, я знаю в ruby, что x.nil? проверит, является ли х нулевым.

Какой самый простой способ проверить, равен ли x ', или' '(два пробела), или' '(три пробела) и т. Д.?

По сути, мне интересно, как лучше всего проверить, является ли переменная пробелом?

Ответы [ 7 ]

31 голосов
/ 25 марта 2010

Если вы используете Rails, вы можете просто использовать:

x.blank?

Это безопасно вызывать, когда x равен nil, и возвращает true, если x равно nil или всем пробелам.

Если вы не используете Rails, вы можете получить его из самоцвета activesupport. Установить с gem install activesupport. В вашем файле либо require 'active_support/core_ext, чтобы получить все активные расширения поддержки базовых классов, либо require 'active_support/core_ext/string', чтобы получить только расширения класса String. В любом случае, метод blank? будет доступен после запроса.

23 голосов
/ 25 марта 2010

«лучший» зависит от контекста, но здесь есть простой способ.

some_string.strip.empty?
16 голосов
/ 25 марта 2010
6 голосов
/ 25 марта 2010

Если 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
0 голосов
/ 26 марта 2010

Еще один :) string.all? { |c| c == ' ' }

0 голосов
/ 25 марта 2010

Исходя из вашего комментария, я думаю, что вы можете расширить класс String и определить метод spaces? следующим образом:

$ 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
>> 
0 голосов
/ 25 марта 2010
a = "  " 

a.each_byte do |x|
  if x == 32
    puts "space"
  end
end
...