C6.07.3Keyboard type is not validation设计研究
键盘类型不能替代输入校验
别名: 键盘不是校验 · input type 与验证 · 客户端校验
概念解释
专用键盘只决定容易打出哪些字符,不决定提交时哪些字符串合法。数字键盘上仍可打出空串、缺位的卡号、超范围的数量;邮箱键盘上打出的也不一定是邮箱。把键盘类型当成校验,等于把“主键面没这个键”误读成“这个值已经合格”。
机制
键盘是生产端的过滤器,校验是接受端的规则。过滤器挡的是不在键面上的字形,挡不住漏打、多打、顺序错、以及从粘贴板进来的整段文本——粘贴不走键面,专用键盘对它无效。即便逐键输入,合法字符的任意排列也大多非法:四位数字键盘填不出“验证码必须是刚发出去的那一串”。地区差异再拆一层:有的数字面用点当小数,本地习惯却是逗号,键面上的字符“都能打”仍会得到校验器不认的格式。键盘类型优化的是可达字符的成本,校验器判断的是值是否满足约束;两者作用点不同,不能互相签字。
怎么研究
给匹配正确的专用键盘配上故意缺失的校验,看非法值是否被提交;再给通用键盘配上严格校验,看合法值是否仍能通过。自变量包括键盘类型、是否允许粘贴、校验发生在失焦还是提交;因变量包括非法提交率、合法被拒率和用户发现错误的时机。只看“这个字段弹出了数字键盘”不能当作质量指标。
边界
把键面限制到极窄(例如四位 PIN 只用四个数字键、不允许粘贴)会降低非法字形,但仍要处理未填完和超时。服务端校验不能省:客户端键盘和脚本都可以被绕过。这条不否定专用键盘的输入效率,只否定用它代替接受规则。
怎么落地
- 在失焦或提交时按真实约束校验(长度、范围、格式、校验位),错误信息指值,不指“请使用数字键盘”。
- 粘贴路径与逐键路径走同一套接受规则;不要假设内容来自当前键面。
- 用一组合法、缺位、越界、错误分隔符和粘贴进来的文本走提交,键盘类型正确但校验缺失的用例应失败。