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] 不是数字时进行交易
情况正是如此。没有什么是错的。