Rails 3 - 使文本字段仅接受数字值

发布于 2024-12-20 18:38:19 字数 75 浏览 2 评论 0原文

如何使文本字段只接受数字值?如果我按字母或符号,则不应填充文本字段,而应只允许数字。

有没有一种轨道方法可以做到这一点?

How do I make a text field accept only numeric values? If I press a letter or a symbol, the text field should not be filled, it should only allow numbers.

Is there a rails way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

迟月 2024-12-27 18:38:19

使用 number_field_tag,这将生成一个 HTML5 数字字段

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

Use number_field_tag, this will generate a HTML5 number field

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

野の 2024-12-27 18:38:19

在服务器端验证数字:

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

在客户端,通过 javascript 添加输入掩码 https: //github.com/ruoso/jquery-regex-mask-plugin

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

On the server side validate numericality:

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

and on the client side, add an input mask via javascript https://github.com/ruoso/jquery-regex-mask-plugin

$('#some_input').regexMask(/^\d+$/);
初熏 2024-12-27 18:38:19

@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 错误的解决方法:

@clyfe's answer is good, but that plugin doesn't work with HTML5 type=number elements. Here's some quick jQuery code that only allows integers:

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

to allow decimals or commas, make the regex look more like those in the plugin, e.g. 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*)?))$/

(Note that different locales have different conventions for decimals and commas, so it's probably safer to just allow digits :-)

Note also that this is a workaround for the Chrome bugs mentioned here:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文