检查红宝石空间的最简单方法

时间:2010-03-25 18:42:21

标签: ruby conditional testing spaces

所以我在ruby中知道x.nil?将测试x是否为空。

测试x等于'',''(两个空格)或''(三个空格)等的最简单方法是什么?

基本上,我想知道测试变量是否都是空白的最佳方法是什么?

7 个答案:

答案 0 :(得分:31)

如果您使用的是Rails,则只需使用:

x.blank?

当x为nil时调用是安全的,如果x为nil或所有空格,则返回true。

如果您不使用Rails,可以从activesupport gem获取它。使用gem install activesupport安装。在您的文件中require 'active_support/core_ext获取基类的所有活动支持扩展,或require 'active_support/core_ext/string'获取String类的扩展。无论哪种方式,blank?方法将在require之后可用。

答案 1 :(得分:23)

“best”取决于上下文,但这是一种简单的方法。

some_string.strip.empty?

答案 2 :(得分:16)

s =~ /\A\s*\Z/

正则表达式解决方案。这是一个short ruby regex tutorial

答案 3 :(得分: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

答案 4 :(得分:0)

a = "  " 

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

答案 5 :(得分:0)

根据您的评论,我认为您可以扩展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
>> 

答案 6 :(得分:0)

又一个:) string.all? { |c| c == ' ' }