web-dev-qa-db-ja.com

Rails 3-テキストフィールドが数値のみを受け入れるようにする

テキストフィールドに数値のみを受け入れるようにするにはどうすればよいですか?文字や記号を押した場合、テキストフィールドは入力せず、数字のみを許可する必要があります。

これを行うためのRails方法はありますか?

13
Angelo

サーバー側で数値を検証します。

class SomeModel
  validates :some_column, :numericality => {:only_integer => true}
end

クライアント側で、javascriptを介して入力マスクを追加します https://github.com/ruoso/jquery-regex-mask-plugin

$('#some_input').regexMask(/^\d+$/);
21
clyfe

使用する number_field_tag、これはHTML5番号フィールドを生成します

http://apidock.com/Rails/ActionView/Helpers/FormTagHelper/number_field_tag

36
Thong Kuah

@clyfeの答えは良いですが、そのプラグインはHTML5では機能しませんtype=number要素。整数のみを許可する簡単なjQueryコードを次に示します。

  $("input[type=number]").keypress(function(event) {
      if (!event.charCode) return true;          
      ch = String.fromCharCode(event.charCode);
      return (/[\d]/.test(ch));
  });

小数またはカンマを許可するには、正規表現をプラグインの正規表現のように見せます。 https://github.com/ruoso/jquery-regex-mask-plugin/blob/master/regex-mask-plugin.js#L8

/^((\d{1,3}(\,\d{3})*(((\,\d{0,2}))|((\.\d*)?)))|(\d+(\.\d*)?))$/

(ロケールが異なれば、小数とカンマの規則も異なるため、数字だけを許可する方がおそらく安全です:-)

これは、ここで言及されているChromeバグの回避策であることに注意してください:

1
AlexChaffee