transaction
当params[:points]
不是数字时,我想继续。我是这样编码的。
if params[:points] !=~ /^[+-]?\d+$/
transaction
end
但是,transaction
即使我abcdefh
输入params[:points]
. 我该如何解决?
transaction
当params[:points]
不是数字时,我想继续。我是这样编码的。
if params[:points] !=~ /^[+-]?\d+$/
transaction
end
但是,transaction
即使我abcdefh
输入params[:points]
. 我该如何解决?
从表单接收到的所有值都是字符串。有些可能看起来像一个数值,但在您将它们显式转换为整数之前,它们将保留为字符串,您可以使用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
我想你想要.match
,不是!=~
。
unless params[:points].match(/^[+-]?\d+$/)
#stuff
end
或者,我终于发现存在“不匹配”运算符,只是它是!~
,而不是!=~
。所以,是的,去掉那个等号也应该解决你的问题。
也许你对自己的逻辑感到困惑。
params[:points]
是"abcdefh"
params[:points] !=~ /^[+-]?\d+$/
transaction
被执行另一方面,
我想在 params[:points] 不是数字时进行交易
情况正是如此。没有什么是错的。