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+$/);
Ответ 2
Используйте number_field_tag
, это создаст поле номера HTML5
http://apidock.com/rails/ActionView/Helpers/FormTagHelper/number_field_tag
Ответ 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, упомянутых здесь: