在Chrome 15中,当使用元素作为文本字段时,即使输入的数字不违反验证规则(例如min、max),前导零(例如011)也会被删除。是否有一种属性可以强制使失去焦点后该字段中保留零?这适用于数值数据,例如国际电话前缀。
<input type="text" pattern="[0-9]*" ...
这段代码可以让iPhone上的数字键盘以及我测试过的更好的Android手机弹出。它是一个文本框,只允许输入数字。
<input type="tel">
是专门为此而引入的。它是HTML5中的新输入类型之一。
number
显然不符合你的需求,而 tel
符合。你问是否有一种属性不会删除前导数字,答案是:tel
。此外,输入类型更多关乎用户界面(如在智能手机上显示哪种键盘等),而非语义。 - Dennis Traub\d{5}-?(\d{4})?
这样的模式非常适合用于邮政编码。 - Lefka我需要在移动浏览器上使用它,我使用了这两种解决方案的混合:
<input type="tel" pattern="[0-9]*">
在iOS上,数字键盘只显示数字(没有#或*符号),而在Android手机上,“tel”被正确解释但不是“pattern”(在我拥有的几部手机上还没有实现)。
我猜当Android浏览器开始实现“pattern”属性时,这个问题在Android上也应该能正常工作(如whatwg规范所建议的那样)。
在此之前,您需要检查输入中的非数字字符并将其删除,JavaScript replace(/[^0-9*]/g,'')对此很有用。
希望这可以帮到您。
8年后...
注意:
使用type="tel"
的答案不能完全解决问题,特别是在数字字段的情况下,您可能希望编写浮点/小数和其他允许的字符(如+-.,)。
解决方案:
考虑使用带有模式和输入模式的文本输入,就像这样:
<input type="text" inputmode="numeric" pattern="[-+]?[0-9]*[.,]?[0-9]+">
详情:
那里的模式将有助于保留前导零,并像数字字段一样运行(包括所有其他允许的字符)。
而 inputmode="numeric"
将调用数字键盘而非默认键盘。
WHATWG规范列出了inputmode,并且现代浏览器正在努力支持它。然而,W3C HTML 5.2规范不再列出它(即将其标记为过时)。在达成共识之前,您应该将WHATWG定义视为正确的。- stephanfriedrich
只应将input type = number用于实际上是数字(int)而不是使用数字(例如邮政编码)的数据的输入。