**TLDR:**哪种输入类型可以使用移动的数字键盘,并使用插入的空格和CVV和信用卡输入的最大限制实现屏蔽,例如:
在构建表单时,我看到了围绕信用卡正确输入类型的不同程度的一致性。以下是我发现的每种类型的优点和缺点:
type=text
- 能够使用各种库(如cleave.js或设置maxLength属性)轻松屏蔽
- 移动的用户不会收到数字键盘,除非将范围设置为[0-9](只有iOS用户将获得此体验,Android用户将获得全键盘)
type=number - 在iOS和Android上显示正确的键盘,但可以输入不需要的字符,并且不能设置maxLength。Min和Max不限制用户输入超过16个字符,但当超过最大值时会提供错误消息。* 注意,由于删除了前导0,因此基本上排除了这种输入类型。(CVV不可接受)
type=tel - 能够正确地屏蔽,并在各地使用,但可能会对辅助功能程序和自动填充程序产生未知的影响。如果有人能澄清使用此输入类型的潜在副作用,那就太棒了!
这些都是我想到的类型。如果有人有其他推荐,请告诉我!
3条答案
按热度按时间wxclj1h51#
HTML
如果你想严格地用HTML来做这件事,我相信下面的内容会让你尽可能地接近:
字符串
inputmode
设置键盘类型(在本例中为数字)pattern
支持验证(在本例中,验证长度为13到19之间的数字和空格),并且它有助于尚未支持inputmode
的浏览器的键盘类型autocomplete
告诉浏览器应该自动完成什么(在本例中,是信用卡号)maxLength
防止用户输入超过设置的字符数(在本例中为19,包括数字和空格)placeholder
给用户一个例子(格式提示)JavaScript
对于一个更健壮的解决方案,JavaScript将是必需的。与其推出自己的解决方案,最好使用经过战斗测试的库。Cleave.js(如您所提到的)是一个流行的选择。
weylhg0b2#
我看到在很多地方使用
type="tel"
,原因你提到。我不会推荐
type="number"
,因为那样你就必须摆弄in/decrement arrows等。从某种Angular 来看,它不是一个“数字”,就我们通常用数字(数学)做的事情而言,请参阅CSS技巧论坛上的这篇评论。如何强制数字键盘的另一个技巧是使用
pattern="[0-9]*"
.这个should work on iOS only.为了使它在Android上工作,以及,你必须将它与type="tel"
合并.9udxz4iz3#
有一个属性
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
或者像你现在使用的一样,用掩码实现一个自定义的输入。