所以我在ruby中知道x.nil?将测试x是否为空。
测试x等于'',''(两个空格)或''(三个空格)等的最简单方法是什么?
基本上,我想知道测试变量是否都是空白的最佳方法是什么?
答案 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 == ' ' }