Ruby on rails 字符串值检查
我想检查变量的字符串值是数字字符串(例如“3.2”、“1”)还是字母字符串(例如“abc”),在ruby或Rails 3中有没有简单的方法可以做到这一点?我会使用Float()Ruby on rails 字符串值检查,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我想检查变量的字符串值是数字字符串(例如“3.2”、“1”)还是字母字符串(例如“abc”),在ruby或Rails 3中有没有简单的方法可以做到这一点?我会使用Float() 您可以将is\u numeric?方法添加到字符串类: class String def is_numeric? true if Float(self) rescue false end end p "123".is_numeric? # true p "abc".is_numeric? # false
您可以将
is\u numeric?
方法添加到字符串类:
class String
def is_numeric?
true if Float(self) rescue false
end
end
p "123".is_numeric? # true
p "abc".is_numeric? # false
使用<代码>浮点()>代码>代替正则表达式处理一些可能不想考虑“数字”的奇怪情况,如<代码> + 123 < /代码>或<代码> - 3 < /> >
< p>您可以使用正则表达式来帮助您。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
我没有完全测试这些正则表达式-您必须确保它们符合您的需要。使用
内核#Float
的实现预期并挽救异常,这是一个缓慢且糟糕的设计。我希望:
class String
def is_numeric?
string.to_f.to_s == string ||
string.to_i.to_s == string
end
end
这不能解释负数。123在Ruby 1.9.2中无效;)@jxpx Ruby的解析器是否会接受它与OP的网站是否应该接受它作为数字输入无关,我不知道这一点。
Float()
是在Float
上定义的类方法吗?看起来不像,这是在实例化Float()类的一个新实例。成功时返回true,失败时返回false。@sawa Ruby允许您定义一个与方法同名的常量/模块/类。这很奇怪,但它允许上述情况。尝试:class Foo;结束;德福;42; 结束;p Foo.new,Foo,Foo()
类似于super
,这是在无参数方法调用中包含或省略括号起作用的少数情况之一。实际上,Kernel#Float
方法在成功时返回Float对象,在失败时引发错误,因此您不希望出现这种情况。我很惊讶它收到了这么多的投票。@Rein它最初是为了处理由Float()
引起的错误而编写的,但是有人(我看着你)编辑它以使用!!Float
表示“可读性稍好”,并在过程中完全破坏了它。已回滚到功能版本。这是一个糟糕的解决方案。它不适用于许多边缘情况,例如“.1”和“+12”或“012”,所有这些都是有效的浮动Float
确实是更好的方法。基于给定的输入,这是更好的解决方案。及时,不只是以防万一。可能的副本
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
class String
def is_numeric?
string.to_f.to_s == string ||
string.to_i.to_s == string
end
end