TLDR:哪种输入类型可以使用移动数字键盘并实现屏蔽注入空格和CVV和信用卡输入的最大限制,例如:XXXX XXXX XXXX XXXX
在构建表单时,我发现信用卡的正确输入类型存在不同程度的一致性。以下是我发现的各种优缺点:
类型=文本
类型=数目
类型=电话
这些是我想到的所有类型。如果有人有任何其他建议,请告诉我!
答案 0 :(得分:9)
如果您尝试使用HTML严格执行此操作,那么我相信以下内容将使您尽可能接近当前情况:
<label for="ccn">Credit Card Number:</label>
<input id="ccn" type="tel" inputmode="numeric" pattern="[0-9\s]{13,19}" autocomplete="cc-number" maxlength="19" placeholder="xxxx xxxx xxxx xxxx">
inputmode
设置键盘类型(在这种情况下为数字)pattern
启用验证(在这种情况下,数字和空格的长度在13到19之间),还可以帮助尚不支持inputmode
的浏览器使用键盘类型autocomplete
告诉浏览器应该自动完成的内容(在这种情况下,是信用卡号)maxLength
防止用户输入超过设置的字符数(在这种情况下,为19个字符,以包括数字和空格)placeholder
为用户提供了一个示例(格式提示)对于更强大的解决方案,将需要JavaScript。而且,与其使用自己的解决方案,不如使用经过战斗验证的库,最好。 Cleave.js(如您所述)是一个受欢迎的选择。
答案 1 :(得分:1)
有一个专为此设计的属性inputmode
,它尚未实现(在HTML 5.2中实际上已弃用),但已经完成了工作(FF / Chrome)。
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input
看到这个讨论: https://github.com/whatwg/html/issues/3290
现在将autocomplete属性设置为正确的值: https://developers.google.com/web/updates/2015/06/checkout-faster-with-autofill
或使用现在正在使用的蒙版实现自定义输入。
答案 2 :(得分:1)
由于您提到的原因,我在很多地方都使用过type="tel"
。
我不建议使用type="number"
,因为那样的话您就不得不弄弄in / decre箭头等。从某些角度来看,就我们通常对数字(数学)所做的操作而言,它不是“数字” ,请参阅here。
另一个强制数字键盘的技巧是使用pattern="[0-9]*"
。 this comment on CSS tricks forum。要使其在Android上也能正常运行,您必须将其与type="tel"
结合使用。