[英]How can I judge whether if form input value is number or not?
当params[:points]
不是数字时,我想进行transaction
。 我这样编码。
if params[:points] !=~ /^[+-]?\d+$/
transaction
end
但是,即使我将abcdefh
输入到params[:points]
,它也会继续进行transaction
。 我该如何解决?
从表单接收的所有值都是字符串。 有些可能看起来像数字值,但它们将保留为字符串,直到您将其显式转换为整数为止,您可以使用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]不是数字时继续进行交易
确实是这样。 没有错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.