が数字でない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