Chrome中的以下代码未强制执行'00 .00'的模式,它允许任何格式的数字具有无限小数。使用输入类型“文本”时,模式工作正常,因此不确定这是否是“数字”问题?
任何建议表示赞赏。
<input type="number" step="1.00" min="0" pattern="\d+(\.\d{2})?" class="form-control" id="JobCost" name="jobcost">
答案 0 :(得分:61)
这是一个相当古老的问题,但我试图理解同样的事情,这是我能够确定的。
首先,类型number
的输入不使用pattern
属性,因此忽略它。
第二,step
属性不仅确定了向上/向下点击器的步骤,还确定了有效值的集合。例如,如果将步骤设置为1.11,则有效值为1.11,2.22,3.33等。如果您输入5.2并提交,它将回复“请输入有效值。两个最接近的有效值是4.44和5.55。”如果您不进入该步骤,则默认为1.然后它只允许“整数”(我使用引号,因为从技术上讲它会允许1.
或1.0
或1.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个小数点但不能更多。它也会接受.
,所以你必须根据你想要的东西来玩。
希望能像我一样帮助你或其他任何人遇到这种情况。