【问题标题】:How to determine if a string is a number?如何判断一个字符串是否为数字?
【发布时间】:2011-05-31 03:11:27
【问题描述】:

在 Rails 3 中找出字符串 str 是否包含正浮点数的最简单方法是什么? (str 不是活动记录模型中的属性)

它应该像这样工作:

str = "123"         =>     true
str = "123.456"     =>     true
str = "0"           =>     true
str = ""            =>     false
str = "abcd"        =>     false
str = "-123"        =>     false

【问题讨论】:

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


【解决方案1】:

这里有一个想法:

class String
  def nonnegative_float?
    Float(self) >= 0
  rescue ArgumentError
    return false
  end
end

但是,由于您似乎已经非常了解非负浮点数的样子,因此您也可以将其与 Regexp 匹配:

class String
  def nonnegative_float?
    !!match(/\A\+?\d+(?:\.\d+)?\Z/)
  end
end

【讨论】:

  • 请注意,这不允许.123;虽然这作为 Ruby 文字浮点数无效,但我怀疑这可能通常发生在用户输入中。
  • @Phrogz:不幸的是,OP 的需求规范难以置信地含糊不清,而且他的测试覆盖率也不是很好,所以这基本上是猜测。您假设'.123' 是有效的,即使它没有测试用例。我假设'+123' 有效,' 123 ' 无效,即使没有测试用例。一个更好的答案基本上需要一个更好的问题。
【解决方案2】:

您可以将其与正则表达式匹配。

str === /^\d+(\.\d+)?$/

【讨论】:

  • 这个正则表达式过于宽泛,既允许负数也允许像u suck d00d 这样的东西。
  • 你说得对,我忘了添加开始和结束锚点。现已修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多