如何判断表单输入值是否为数字?

时间:2013-06-13 18:05:49

标签: ruby

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

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

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

3 个答案:

答案 0 :(得分:2)

从表单收到的所有值都是字符串。有些可能看起来像一个数值,但它们将保持字符串,直到您明确地将它们转换为整数,您可以使用String's 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

答案 1 :(得分:1)

我认为您需要.match,而不是!=~

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

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

答案 2 :(得分:1)

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

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

另一方面,

  

当params [:points]不是数字时,我想继续交易

情况确实如此。没有错。