Rails 3 - заставьте текстовое поле принимать только числовые значения - PullRequest
11 голосов
/ 13 декабря 2011

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

Есть ли способ сделать это с помощью рельсов?

Ответы [ 3 ]

34 голосов
/ 13 декабря 2011

Используйте number_field_tag, это сгенерирует поле числа HTML5

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

19 голосов
/ 13 декабря 2011

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

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

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

$('#some_input').regexMask(/^\d+$/);
1 голос
/ 02 июня 2015
Ответ

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...