【问题标题】:HTML5 Input Type 'Number' Pattern not being enforced未强制执行 HTML5 输入类型“数字”模式
【发布时间】:2014-05-15 04:17:37
【问题描述】:

Chrome 中的以下代码不强制执行“00.00”模式,它允许任何具有无限小数的数字格式。该模式在使用输入类型“文本”时工作正常,所以不确定这是否是“数字”问题?

任何建议表示赞赏。

<input type="number" step="1.00" min="0" pattern="\d+(\.\d{2})?" class="form-control" id="JobCost" name="jobcost">

JSFiddle

【问题讨论】:

  • ^\d+(\.\d{1,2})?$

标签: html


【解决方案1】:

这是一个相当古老的问题,但我试图理解同样的事情,这是我能够确定的。

首先number 类型的输入不使用pattern 属性,因此忽略它。

第二step属性不仅决定了上/下点击器的步长,还决定了有效值的集合。例如,如果您将步长设置为 1.11,则有效值为 1.11、2.22、3.33 等。如果输入5.2并提交,会回复“请输入有效值。最接近的两个有效值是4.44和5.55。”如果不输入步骤,则默认为1。然后它只允许“整数”(我使用引号,因为从技术上讲,它允许1.1.01.00 等)。如果您想使用任何号码,请使用step="any"。我确实在某处读过,虽然 chrome 强制执行默认步长 1,但 firefox 将允许小数(将其视为任何小数??)。

第三,如果它没有嵌入到form 标记中,这些都不起作用。

因此,如果您想将数字强制保留为 2 位小数,请使用 type="number" step=".01"(要知道您的上/下答题器会增加/减少 0.01)或使用 type="text" pattern="\d+(\.\d{2})?"。请注意,在您的正则表达式中,它不允许.23,因为您有\d+。不过,它将允许0.23。如果您想允许小数点不带前导 0,请改用 \d+(\.\d{2})?。它也只允许 2 位小数或没有(拒绝 1.1.2 但接受 1.20)。如果这就是你想要的,那就太好了。只是想确定一下。

\d*(\.\d{0,2})? 可以接受小数点后 2 位以内的任何数字,但不能更多。不过,它也只接受.,因此您必须根据自己的需要进行调整。

希望对您或其他遇到这种情况的人有所帮助。

【讨论】:

  • 很好的解释。我收到消息 “请输入一个有效值。两个最接近的有效值是 4.44 和 5.55。” 如您所说,但不知道为什么。我正在研究价格,所以允许任何小数。当我设置step: :any(Rails)时,一切正常。
  • 第 3 点对于 Chrome 不再准确(我有版本 75.0.3770.100(官方构建)(64 位))。即使在表单标签之外也会出现警告。
猜你喜欢
  • 2015-09-03
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 2016-08-13
  • 1970-01-01
  • 2013-07-14
  • 1970-01-01
相关资源
最近更新 更多