如何让 HTML input 标签只接受数值?

新手上路,请多包涵

我需要确保某个 <input> 字段只将数字作为值。输入不是表单的一部分。因此它不会被提交,因此在提交期间进行验证不是一种选择。我希望用户无法输入数字以外的任何字符。

有没有一种巧妙的方法来实现这一目标?

原文由 chtenb 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 492
2 个回答

HTML 5

您可以使用 HTML5 输入类型数字 来限制仅输入数字:

 <input type="number" name="someid" />

这仅适用于 HTML5 兼容浏览器。确保您的 html 文档的文档类型是:

<!DOCTYPE html>

另请参阅 https://github.com/jonstipe/number-polyfill 以了解旧版浏览器中的透明支持。

JavaScript

更新: 有一个新的非常简单的解决方案:

它允许您对文本 <input> 使用 任何 类型的输入过滤器,包括各种数字过滤器。这将正确处理复制+粘贴、拖放、键盘快捷键、上下文菜单操作、不可键入的键和所有键盘布局。

请参阅 此答案在 JSFiddle 上 自己尝试。

对于一般用途,您可以进行如下 JS 验证:

 function isNumberKey(evt){
    var charCode = (evt.which) ? evt.which : evt.keyCode
    if (charCode > 31 && (charCode < 48 || charCode > 57))
        return false;
    return true;
}

<input name="someid" type="number" onkeypress="return isNumberKey(event)"/>

如果你想允许小数,用这个替换“if condition”:

 if (charCode > 31 && (charCode != 46 &&(charCode < 48 || charCode > 57)))

来源: HTML文本输入只允许数字输入

JSFiddle 演示:http: //jsfiddle.net/viralpatel/nSjy7/

原文由 Viral Patel 发布,翻译遵循 CC BY-SA 4.0 许可协议

也可以使用html5中的pattern属性:

 <input type="text" name="name" pattern="[0-9]" title="Title" />

输入验证教程

虽然,如果您的文档类型不是 html 那么我认为您需要使用一些 javascript/jquery。

原文由 martincarlin87 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题