0

が数字でないtransaction場合に進みたい。params[:points]このようにコーディングしました。

if params[:points] !=~ /^[+-]?\d+$/
  transaction
end

しかし、transactionに入力abcdefhしても進みますparams[:points]。どうすれば修正できますか?

4

3 に答える 3

2

フォームから受け取るすべての値は文字列です。数値のように見えるものもありますが、明示的に整数に変換するまでは文字列のままです。これは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
于 2013-06-13T18:07:34.090 に答える