验证

检验输入数据是否符合规定的格式、范围和约束条件的处理过程。包括字符数限制、字符类型检查、格式验证等。

验证 (validation) 是确认用户输入的数据或系统间传递的数据是否满足预期条件的处理过程。表单中输入的邮箱地址格式是否正确、密码是否达到最低字符数要求、手机号是否全部由数字组成 - 这些都是验证的具体实例。

验证按执行位置分为两类。客户端验证在浏览器端即时返回反馈,提升用户体验。HTML5 的 requiredmaxlengthpattern 属性以及 JavaScript 动态检查都属于此类。服务端验证在服务器上进行最终校验,保障安全性。由于客户端检查可以通过开发者工具轻松绕过,服务端验证不可省略。

字符数相关的验证是最基本也最常见的模式。微博的 140 字限制、短信的 70 字 (中文) 限制、数据库 VARCHAR 列的上限等,几乎所有系统都存在字符数约束。这里的关键问题是「什么算一个字符」。emoji 👨‍👩‍👧‍👦 看起来是 1 个字符,但在 Unicode 中由 7 个码点 (4 个人物 emoji + 3 个 ZWJ) 组成。不同平台对此计为 1 个字符还是 7 个字符的处理各不相同,因此验证的实现必须明确字符数的定义。

字符类型验证同样重要。中文表单中常见「仅限中文字符」「仅限半角英文数字」等约束。可以用正则表达式 /^[\u4e00-\u9fff]+$/ (常用汉字) 或 /^[a-zA-Z0-9]+$/ (半角英数字) 进行检查。但需要注意 CJK 统一汉字扩展区的字符范围、标点符号的全角半角区分等边界情况。

格式验证用于校验邮箱地址、URL、日期、邮政编码等的格式。邮箱地址的正则表达式如果要完全符合 RFC 5321 会极其复杂,实务中通常采用简化的模式进行初步验证,最终通过发送确认邮件来验证可达性。

验证错误消息的设计直接影响产品质量。与其显示「输入错误」,不如明确告知「密码需要 8 个字符以上,且包含字母和数字」,让用户知道问题所在和解决方法。错误消息本身也受字符数限制 (移动端屏幕宽度、工具提示的最大长度等),需要做到简洁而明确。

分享这篇文章