HTML5输入类型'数字'模式没有被强制执行

时间:2014-04-03 11:15:58

标签: html5

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

任何建议表示赞赏。

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

JSFiddle

1 个答案:

答案 0 :(得分:61)

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

首先,类型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"(了解您的向上/向下点击器将增加/减少.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个小数点但不能更多。它也会接受.,所以你必须根据你想要的东西来玩。

希望能像我一样帮助你或其他任何人遇到这种情况。