Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 字符串值检查_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 字符串值检查

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

我想检查变量的字符串值是数字字符串(例如“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

使用<代码>浮点()>代码>代替正则表达式处理一些可能不想考虑“数字”的奇怪情况,如<代码> + 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