C6.07.3Keyboard type is not validation设计研究

键盘类型不能替代输入校验

别名: 键盘不是校验 · input type 与验证 · 客户端校验

概念解释

专用键盘只决定容易打出哪些字符,不决定提交时哪些字符串合法。数字键盘上仍可打出空串、缺位的卡号、超范围的数量;邮箱键盘上打出的也不一定是邮箱。把键盘类型当成校验,等于把“主键面没这个键”误读成“这个值已经合格”。

机制

键盘是生产端的过滤器,校验是接受端的规则。过滤器挡的是不在键面上的字形,挡不住漏打、多打、顺序错、以及从粘贴板进来的整段文本——粘贴不走键面,专用键盘对它无效。即便逐键输入,合法字符的任意排列也大多非法:四位数字键盘填不出“验证码必须是刚发出去的那一串”。地区差异再拆一层:有的数字面用点当小数,本地习惯却是逗号,键面上的字符“都能打”仍会得到校验器不认的格式。键盘类型优化的是可达字符的成本,校验器判断的是值是否满足约束;两者作用点不同,不能互相签字。

怎么研究

给匹配正确的专用键盘配上故意缺失的校验,看非法值是否被提交;再给通用键盘配上严格校验,看合法值是否仍能通过。自变量包括键盘类型、是否允许粘贴、校验发生在失焦还是提交;因变量包括非法提交率、合法被拒率和用户发现错误的时机。只看“这个字段弹出了数字键盘”不能当作质量指标。

边界

把键面限制到极窄(例如四位 PIN 只用四个数字键、不允许粘贴)会降低非法字形,但仍要处理未填完和超时。服务端校验不能省:客户端键盘和脚本都可以被绕过。这条不否定专用键盘的输入效率,只否定用它代替接受规则。

怎么落地

  • 在失焦或提交时按真实约束校验(长度、范围、格式、校验位),错误信息指值,不指“请使用数字键盘”。
  • 粘贴路径与逐键路径走同一套接受规则;不要假设内容来自当前键面。
  • 用一组合法、缺位、越界、错误分隔符和粘贴进来的文本走提交,键盘类型正确但校验缺失的用例应失败。

延伸

  • 同组C6.07.1 数字、邮箱、URL 等专用键盘减少切换 · C6.07.2 键盘类型错配会强制用户多次切换面板
  • 相邻C6.11 自动纠错 · C6.28 表单自动填充
  • 站内检索input validation · keyboard type · client-side validation

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/C6.07.3