返回
UI · №25 · PLATE

表单验证提示Validation Feedback

输入框下面那行小字表单报错的红字填对了打个勾提示文案错误提示放哪

先看怎么选

字段下方的一行小字,有三种身份——出错前的引导、出错后的纠正、通过后的确认。混用的代价:用户还没开始填就看到红字被吓到;或者出错了只有边框变红,没人告诉他错在哪、怎么改。

朱批出错前用 Helper(中性引导)、出错后换 Error(红字纠正 + 怎么改)、通过后才可选 Success(绿色确认)。同一个位置、三种身份,靠颜色和时机区分,不同时出现。

LIVE SPECIMEN真的能玩,点点看
Helper — 出错前

至少 8 个字符

中性引导,常驻可见

Error — 出错后

密码至少 8 个字符,还差 3 个

错误色 + 边框同步,说清怎么改

Success — 通过后(可选)

该用户名可用

仅高焦虑字段,其余沉默即通过

至少 8 个字符

普通字段:修够 8 位后回到 Helper,不打绿勾

4-20 个字符,字母数字下划线

高焦虑字段:离开时模拟服务器检查,通过给 Success

试试看:

  • 密码敲 3 个字符点别处 → Error 在同一行换班;补够 8 位再离开 → 静静换回 Helper(沉默即通过)
  • 用户名填 paper_cat 离开 → 检查中 → 绿色 Success;换成 admin → 服务器打回「已被占用」
  • 盯住反馈行:三种身份来回换,下方内容纹丝不动(预留高度,布局不跳)

帮助文本

Helper Text

错误发生之前的引导。中性色小字,常驻在字段下方,告诉用户这一格要填什么、有什么规则(「至少 8 个字符」「用于接收订单通知」)。

适合
字段有格式规则或用途需要说明时——密码规则、用户名限制、这个信息拿去做什么。用户填之前就能看到,避免犯错。
不适合
不要把规则塞进 placeholder 当 Helper 用(一输入就消失,用户记不住);不要用红色写 Helper——还没出错就红字,用户以为自己已经错了。
实现细节与 Prompt
颜色
次要文字色 Ink-2 #6B675F(对比度 5.2+,达 AA)——中性,不惊扰
位置
字段正下方,label 之外唯一的说明位
可访问性
aria-describedby 把 Helper 关联到 input,屏幕阅读器聚焦时会读出
Add helper text to this input field. Rules: - Place it directly below the field, always visible (not in placeholder) - Neutral secondary text color (#6B675F), 12-13px - State the rule or purpose plainly: "至少 8 个字符" - Link it to the input via aria-describedby so screen readers announce it when the field gets focus

错误信息

Error Message

错误发生之后的纠正。错误色文字出现在字段下方(替换 Helper 的位置),同时字段边框变错误色——颜色、文字双通道,说清什么错了、怎么改。

适合
校验失败时(时机见 №03「表单结构与校验」的三层校验)。文案必须包含修复方法:「邮箱格式不正确,请输入完整邮箱 user@example.com」,而不是「输入有误」。
不适合
不要只变边框不给文字(色弱用户看不见红,看见了也不知道错在哪);不要把错误藏进 Tooltip 要 hover 才看到;不要和 Helper 同时显示——同一位置替换,不是叠加。
实现细节与 Prompt
颜色
Error #A02C2C(对比度 6.8 on paper,达 AA)+ 边框同步变色
双通道
颜色 + 文字缺一不可;可加内联 SVG 警示 icon 强化(禁 emoji)
可访问性
role="alert" 即时播报;aria-invalid="true";aria-describedby 指向错误文案
Add error message display to this input field. Rules: - Show the message directly below the field, replacing the helper text (same slot — never both at once) - Error color (#A02C2C) for both the message and the field border - The message must say what is wrong AND how to fix it - Set role="alert" on the message container, aria-invalid="true" on the input, and keep aria-describedby pointing at the message - Reserve the line height so the layout does not jump when the message appears

成功确认

Success Feedback

校验通过后的确认。成功色 + 内联 SVG 对勾,告诉用户「这一格可以放心了」。是三种身份里唯一可以省略的——沉默即通过。

适合
高价值、易出错的字段——用户名可用性检查(查过服务器才知道)、优惠码验证成功。用户对「过没过」有真实焦虑时,确认才有价值。
不适合
不要每个字段都打钩——满屏绿色对勾是视觉噪音,确认就贬值了;不要用 Success 替代提交后的整体反馈(那是 Toast / 页面跳转的事)。
实现细节与 Prompt
颜色
Success #3D7A44(对比度 4.8+ on paper,达 AA)
图标
内联 SVG 对勾(stroke 2px),禁 emoji
默认策略
沉默即通过——大多数字段校验通过后直接不显示任何反馈
Add success feedback to this input field (use sparingly). Rules: - Only for high-anxiety fields (e.g. username availability that required a server check) — most fields should stay silent on success - Success color (#3D7A44) text + inline SVG checkmark (no emoji) - Same slot below the field as helper/error — replace, never stack - Announce via role="status" so screen readers hear the confirmation

详细说明

表单验证提示:Helper / Error / Success

它是什么

字段下方那行小字,是表单和用户之间最细也最高频的对话通道。它有三种身份:

  1. Helper Text——出错的引导(中性色,「至少 8 个字符」);
  2. Error Message——出错的纠正(错误色,「还差 3 个字符」);
  3. Success Feedback——通过后的确认(成功色,可省略)。

№03「表单结构与校验」管的是什么时候校验(实时 / 提交时 / 服务器端);这个词条管的是反馈长什么样——放哪、什么颜色、怎么换班。三种身份共用字段下方同一个位置,替换出现,永不叠加

快速判断

时刻 用哪种 颜色 必要性
用户还没填 / 正在填 Helper Text 次要色 Ink-2 有规则就该有
校验失败 Error Message 错误色 #A02C2C 必须有
校验通过 Success Feedback 成功色 #3D7A44 通常省略,高焦虑字段才用

换班规则

  • 同一位置只显示一种:Helper → 出错换 Error → 修好换回 Helper(或 Success)
  • 沉默即通过:大多数字段修正后直接回到 Helper,不需要绿勾
  • 表单级(跨字段)的错误汇总不归这里——那用顶部 Alert,见 №04「提示(怎么选)」

错误态解剖

一个完整的错误态由三层组成,缺一层体验就塌一角:

┌─────────────────────────────┐
│ 密码 *                       │
│ ┌───────────────────────────┤ ← ① 边框变错误色(远看就知道有问题)
│ │ abc12                     │
│ └───────────────────────────┤
│ 密码至少 8 个字符,还差 3 个   │ ← ② 错误文字(近看知道错在哪、怎么改)
└─────────────────────────────┘
     ↑ ③ aria-invalid + role="alert"(看不见的用户也知道)
  • ① 颜色通道:边框 + 文字用 error 色。只有这一层是不够的——色弱用户看不出红,看得出的也不知道错在哪。
  • ② 文字通道:说清「什么错 + 怎么改」。可以加内联 SVG 警示 icon 强化(禁 emoji)。
  • ③ 语义通道aria-invalid="true"、错误容器 role="alert"aria-describedby 关联——屏幕阅读器用户与明眼用户获得同等信息。

布局细节:给反馈行预留高度(min-height)或用固定行高替换——错误出现时把下方内容挤得跳一下(布局抖动),是廉价感的主要来源之一。

技术标注

考虑点 决策
位置 字段正下方,紧贴字段(目光流:字段 → 下方反馈);不放右侧、不放 Tooltip
颜色对比度 Helper Ink-2 5.2+、Error #A02C2C 6.8、Success #3D7A44 4.8+(均达 WCAG AA)
换班 Helper / Error / Success 共用一个槽位,替换不叠加
布局稳定 反馈行预留高度,出现/消失不推挤下方内容
图标 内联 SVG(stroke 2px、currentColor),禁 emoji
可访问性 Helper 用 aria-describedby;Error 加 role=“alert” + aria-invalid;Success 用 role=“status”

什么时候用这个词

做设计决策时

场景:注册表单的密码字段

用户旅程逐步走:

未聚焦 / 聚焦中   → Helper:「至少 8 个字符」(中性色,预防犯错)
输入 abc12 后离开 → Error:「密码至少 8 个字符,还差 3 个」
                    (错误色文字 + 边框变红 + role="alert")
补到 8 位         → 回到 Helper 或直接沉默(普通字段不需要绿勾)

对比:用户名字段(需要查服务器才知道可不可用)
校验通过          → Success:「✓ 该用户名可用」(真实焦虑,确认有价值)

给 agent 发指令时

不要只说「加个错误提示」——说清三种身份和换班规则:

给密码字段加验证反馈:
1. 默认显示 Helper「至少 8 个字符」(次要色 #6B675F,字段下方)
2. Blur 校验失败时同一位置换成错误信息(#A02C2C,文案含还差几位),
   边框同步变红,加 role="alert" 和 aria-invalid
3. 修正后换回 Helper;反馈行预留高度,出现消失不许挤动布局

常见错误

错误 1:把规则塞进 placeholder 当 Helper

<input placeholder="至少 8 个字符,含大小写和数字" />

用户一开始输入,规则就消失了——填到第 6 位忘了还要不要数字。
正确做法:规则放字段下方的 Helper Text,全程可见。

错误 2:只变边框不给文字

校验失败 → 边框变红,没有任何文字。

色弱用户:什么都没发生。
其他用户:红了,但错在哪?格式?长度?已被占用?
正确做法:颜色 + 文字双通道,文案说清怎么改。

错误 3:Helper 和 Error 同时显示

│ 至少 8 个字符          │ ← Helper 还在
│ 密码太短               │ ← Error 又来
两行小字打架,用户不知道看哪行。
正确做法:同一槽位替换——出错时 Error 顶替 Helper。

错误 4:错误信息藏在 Tooltip 里

字段变红,错误文案要 hover 图标才显示。

移动端没有 hover;键盘用户够不到;用户根本不知道要去 hover。
正确做法:错误直接显示在字段下方,不需要任何额外操作。

错误 5:反馈出现时布局跳动

错误文字插入 → 下方所有内容向下挤一行 → 用户正要点的按钮跳走了。

正确做法:反馈行预留固定高度(min-height),出现/消失只换内容不换布局。

相关词条

  • №03「表单结构与校验」 — 什么时候校验(三层时机);本词条管反馈长什么样
  • №03「输入框最佳实践」 — 字段本身的状态设计(focus / filled / disabled)
  • №04「提示(怎么选)」 — 跨字段的表单级错误汇总用 Alert,操作结果用 Toast
  • №03「按钮怎么选」 — 提交按钮的 Loading / Disabled 态与校验反馈联动

完整可复制的 Prompt

给注册表单的「用户名」和「密码」两个字段设计完整的验证反馈。

三种反馈(同一槽位,替换不叠加):
1. Helper Text(默认):
   - 用户名:「4-20 个字符,可用字母数字下划线」
   - 密码:「至少 8 个字符」
   - 次要色 #6B675F,12-13px,字段正下方,aria-describedby 关联
2. Error Message(校验失败,Blur 触发):
   - 同一位置替换 Helper;文字 #A02C2C + 边框同步变色
   - 文案含修复方法(「还差 N 个字符」)
   - role="alert" + aria-invalid="true"
3. Success Feedback(仅用户名——模拟服务器可用性检查通过后):
   - 「该用户名可用」+ 内联 SVG 对勾(stroke 2px),#3D7A44
   - role="status";密码字段通过后保持沉默(不打绿勾)

布局与细节:
- 反馈行预留高度,出现/消失不得推挤布局
- 所有颜色对白底对比度 ≥ 4.5:1(WCAG AA)
- 禁用 emoji,图标一律内联 SVG

输出:HTML + CSS(三种状态)+ JS(换班逻辑)+ 使用说明。

为什么这个决策很重要

字段下方那行小字,是用户在表单里读得最多的文案——比标题读得多,比按钮文案读得多。

  • Helper 缺位:用户靠试错学规则,每错一次消耗一次耐心
  • Error 只有颜色没有文字:用户知道错了但不知道怎么改,反复试到放弃
  • 三种身份混用(没填就红字、满屏绿勾):反馈系统失去公信力,用户开始无视它

一句话:验证提示是表单的「语气」——引导时中性、纠错时具体、确认时克制,用户才会信任这张表单。