19

所以我知道红宝石x.nil?将测试 x 是否为空。

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

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

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?方法都将在需要之后可用。

于 2010-03-25T19:09:18.203 回答
25

“最佳”取决于上下文,但这里有一个简单的方法。

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

正则表达式解决方案。这是一个简短的 ruby​​ 正则表达式教程

于 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/当且仅当x所有空格字符都返回 false :

if not (x.nil? or x =~ /\S/) then
    puts "It's all whitespace!"
end
于 2010-03-25T18:46:59.467 回答
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
>> 
于 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 回答