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