所以我知道红宝石x.nil?将测试 x 是否为空。
测试 x 是否等于 ' ' 或 ' '(两个空格)或 ' '(三个空格)等的最简单方法是什么?
基本上,我想知道测试变量是否全是空格的最佳方法是什么?
所以我知道红宝石x.nil?将测试 x 是否为空。
测试 x 是否等于 ' ' 或 ' '(两个空格)或 ' '(三个空格)等的最简单方法是什么?
基本上,我想知道测试变量是否全是空格的最佳方法是什么?
如果您使用的是 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?
方法都将在需要之后可用。
“最佳”取决于上下文,但这里有一个简单的方法。
some_string.strip.empty?
s =~ /\A\s*\Z/
正则表达式解决方案。这是一个简短的 ruby 正则表达式教程。
如果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
根据您的评论,我认为您可以扩展 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
>>
a = " "
a.each_byte do |x|
if x == 32
puts "space"
end
end
完后还有 :)string.all? { |c| c == ' ' }