0

transactionparams[:points]不是数字时,我想继续。我是这样编码的。

if params[:points] !=~ /^[+-]?\d+$/
  transaction
end

但是,transaction即使我abcdefh输入params[:points]. 我该如何解决?

4

3 回答 3

2

从表单接收到的所有值都是字符串。有些可能看起来像一个数值,但在您将它们显式转换为整数之前,它们将保留为字符串,您可以使用String 的to_i方法来完成。

您可以检查整个值是否包含数字,这是一个很好的线索,表明它确实是一个数字,使用以下内容:

!!params[:points][/^[+-]?\d+$/]

如果它是数字的字符串版本,则返回 true/false。

'012345'[/^[+-]?\d+$/]
=> "012345"

!!'012345'[/^[+-]?\d+$/]
=> true

'+012345'[/^[+-]?\d+$/]
=> "+012345"

!!'+012345'[/^[+-]?\d+$/]
=> true

'-+012345'[/^[+-]?\d+$/]
=> nil

!!'-012345'[/^[+-]?\d+$/]
=> true

'0 foo'[/^[+-]?\d+$/]
=> nil

!!'0 foo'[/^[+-]?\d+$/]
=> false
于 2013-06-13T18:07:34.090 回答
1

我想你想要.match,不是!=~

unless params[:points].match(/^[+-]?\d+$/)
  #stuff
end

或者,我终于发现存在“不匹配”运算符,只是它是!~,而不是!=~。所以,是的,去掉那个等号也应该解决你的问题。

于 2013-06-13T18:10:04.397 回答
1

也许你对自己的逻辑感到困惑。

  • params[:points]"abcdefh"
  • params[:points] !=~ /^[+-]?\d+$/
  • transaction被执行

另一方面,

我想在 params[:points] 不是数字时进行交易

情况正是如此。没有什么是错的。

于 2013-06-13T18:22:37.940 回答