Rails 3 - Сделать текстовое поле только числовыми значениями

Как создать текстовое поле для ввода только числовых значений? Если я нажму букву или символ, текстовое поле не должно быть заполнено, оно должно разрешать только номера.

Есть ли способ рельсов для этого?

Ответ 1

На стороне сервера проверьте числовое значение:

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

и на стороне клиента добавьте маску ввода через javascript https://github.com/ruoso/jquery-regex-mask-plugin

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

Ответ 3

@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, упомянутых здесь: