字符串值检查

时间:2011-04-05 13:33:27

标签: ruby-on-rails ruby ruby-on-rails-3

我想检查变量的字符串值是否为数字字符串(例如'3.2','1')或字母字符串(例如'abc'),是否有任何简单的方法可以在ruby或Rails 3中执行此操作?

5 个答案:

答案 0 :(得分:7)

我会使用Float()。

def numeric?(object)
  true if Float(object) rescue false
end

答案 1 :(得分:1)

您可以在字符串类中添加is_numeric?方法:

class String
  def is_numeric?
    true if Float(self) rescue false
  end
end

p "123".is_numeric? # true
p "abc".is_numeric? # false

使用Float()代替正则表达式会处理一些您可能不想考虑“数字”的奇怪案例,例如+123-.3

答案 2 :(得分:1)

您可以使用正则表达式来帮助您。

str = "abc"
# first regex checks for character string, second regex checks for floating point number
if not str.empty? and str =~ /^[a-z]+$/i or str =~ /^[-+]?[0-9]*\.?[0-9]*$/ then
  # this is a match
else
  # no match
end

我没有完全测试这些正则表达式 - 你必须确保它们符合你的需求。

答案 3 :(得分:0)

使用Kernel#Float的实现期望并挽救一个异常,这是一个缓慢而糟糕的设计。我更喜欢:

class String
  def is_numeric?  
    string.to_f.to_s == string ||
      string.to_i.to_s == string
  end
end

答案 4 :(得分:-2)

string == /\d+\.?\d+/ ? "Numbers" : "Letters"