当transaction
不是数字时,我想继续params[:points]
。我这样编码。
if params[:points] !=~ /^[+-]?\d+$/
transaction
end
但是,即使我将transaction
输入abcdefh
,也会params[:points]
。我该如何解决?
答案 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]不是数字时,我想继续交易
情况确实如此。没有错。