Ruby on rails 如何确定字符串是否为数字?

Ruby on rails 如何确定字符串是否为数字?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我原以为这会更容易找到,但我很惊讶事实并非如此 究竟如何测试字符串是否是模型外的数字(包括小数) e、 g 在PHP中,有is_numeric,但在Ruby(或Rails)中,我似乎找不到类似的东西 到目前为止,我已经阅读了以下答案,但还没有进一步了解: 您可以借用Rails用于验证数字的思想,它使用以下方法: 它还处理符号、十六进制数和用科学记数法书写的数字: numeric?('-10') # => true numeric?('0xFF') # => true n

我原以为这会更容易找到,但我很惊讶事实并非如此

究竟如何测试字符串是否是模型外的数字(包括小数)

e、 g

在PHP中,有
is_numeric
,但在Ruby(或Rails)中,我似乎找不到类似的东西

到目前为止,我已经阅读了以下答案,但还没有进一步了解:


您可以借用Rails用于验证数字的思想,它使用以下方法:

它还处理符号、十六进制数和用科学记数法书写的数字:

numeric?('-10')   # => true
numeric?('0xFF')  # => true
numeric?('1.2e6') # => true

您可以借用Rails用于验证数字的思想,它使用以下方法:

它还处理符号、十六进制数和用科学记数法书写的数字:

numeric?('-10')   # => true
numeric?('0xFF')  # => true
numeric?('1.2e6') # => true

可以使用正则表达式

!!("1" =~ /\A[-+]?[0-9]+(\.[0-9]+)?\z/) # true
!!("1.234" =~ /\A[-+]?[0-9]+(\.[0-9]+)?\z/) # true
!!("-1.45" =~ /\A[-+]?[0-9]+(\.[0-9]+)?\z/) # true
!!("1.23aw" =~ /\A[-+]?[0-9]+(\.[0-9]+)?\z/) # false
您可以像这样使用它,或者在模块中创建一个方法,或者将其添加到String类中

class String
  def is_number?
    !!(self =~ /\A[-+]?[0-9]+(\.[0-9]+)?\z/)
  end
end
您可以使用此网站测试您的表达式:

如果需要的话,我可以解释得更多


希望这有帮助。

您可以使用正则表达式

!!("1" =~ /\A[-+]?[0-9]+(\.[0-9]+)?\z/) # true
!!("1.234" =~ /\A[-+]?[0-9]+(\.[0-9]+)?\z/) # true
!!("-1.45" =~ /\A[-+]?[0-9]+(\.[0-9]+)?\z/) # true
!!("1.23aw" =~ /\A[-+]?[0-9]+(\.[0-9]+)?\z/) # false
您可以像这样使用它,或者在模块中创建一个方法,或者将其添加到String类中

class String
  def is_number?
    !!(self =~ /\A[-+]?[0-9]+(\.[0-9]+)?\z/)
  end
end
您可以使用此网站测试您的表达式:

如果需要的话,我可以解释得更多



希望这有帮助。

可能重复@JustinWood的解决方案不适用于Strings为什么不使用正则表达式?什么例外<代码>值。to_f不应引发异常…@JustinWood不幸的是,使用
to_f
无法区分非数字字符串和零:
'0'。to_f#=>0.0
'foo'。to_f#=>0.0
。可能存在@JustinWood的重复。那里的解决方案不适用于strings为什么不只使用正则表达式?什么例外<代码>值。toêf永远不应该抛出异常…@JustinWood不幸的是,使用
toêf
你无法区分非数字字符串和零:
'0'。toêf=>0.0
'foo'。所以我必须定义这个方法,对吗?(即,它不是内置的)是的,没有内置函数或库函数用于此目的。因此,我必须定义此方法,对吗?(即,它不是内置的)是的,没有用于此目的的内置函数或库函数。如果基数大于10,则此操作失败,例如
0xdeadbeef
Why downvote?OP没有表示他想测试一个特定的碱基或10以外的碱基。并且可以更改正则表达式,因此答案仍然有效。@FredPerrin我得到了你的支持。如果值的基数大于10,则会失败,例如
0xdeadbeef
Why downvote?OP没有表示他想测试一个特定的碱基或10以外的碱基。可以改变正则表达式,所以答案仍然有效。@FredPerrin我支持你