前端表单防呆实践:如何排查自动填充导致的提交失败?

最近在做一个表单提交的测试,遇到一个非常高频的客诉:用户反馈明明输入了正确的邀请码(例如测试用例 17200077),但点击提交后,系统一直提示"格式错误"。

经过几轮排查,问题既不在后端接口,也不在用户的视力,而是出在浏览器的自动填充机制上。

场景复现

在 Chrome 浏览器中,如果用户使用了"记住密码"或"自动填充表单",前端在获取 input 的值时,字符串的首尾极有可能带入了不可见的空格(如 \u200b 或常规空格 ``)。由于后端接口(如 api.172card.tianzhuicn.com)做了严格的 ^\d{8}$ 正则校验,导致只要带有隐藏字符,就会直接抛错。

解决方案

作为前端,我们需要在提交前对数据进行一次清洗:

js 复制代码
// 获取原始输入值
let rawValue = document.getElementById('invite-code').value;

// 1. 去除首尾空格
let cleanValue = rawValue.trim();

// 2. 额外处理某些浏览器带入的零宽空格
cleanValue = cleanValue.replace(/[\u200b-\u200d\uFEFF]/g, '');

// 3. 再次校验
if (!/^\d{8}$/.test(cleanValue)) {
    alert('邀请码格式不正确,请检查是否含有空格');
    return;
}

// 4. 提交给后端
fetch('https://172card.tianzhuicn.com/api/submit', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({ code: cleanValue })
});

防呆建议

除了在提交前做数据清洗,为了从源头减少错误,前端还可以做以下优化:

  1. 在 HTML 标签中显式添加 autocomplete="off",关闭浏览器自动填充。
  2. 对于此类固定长度的数字验证,使用 inputmode="numeric" 调起数字键盘,避免用户误触字母。
  3. 输入框的 maxlength 属性设为对应长度(如 8),防止多输。

看似是个很小的细节,但这能挡住 80% 的用户低级报错。

相关推荐
github_is_geeksKai26 分钟前
浏览器端文件处理的边界:PDF 面单、GPX 隐私与 EPUB 修复
前端
deli0071 小时前
从一句反馈到一次升级:Mystudy 的自进化实践
前端
FungLeo2 小时前
成为全栈·Vue 管理后台篇·用 fetch 建一层可控的请求内核
前端·javascript·vue.js·http·fetch·formdata·接口封装
FungLeo4 小时前
成为全栈·Vue 管理后台篇·Vue Router如何守住多角色后台边界
前端·javascript·vue.js·rbac·vue router·路由守卫·前端权限
FungLeo4 小时前
成为全栈·Vue 管理后台篇·分页只显示第一页:从接口total 定位到前端修复
前端·vue.js·状态模式·分页·naive ui·服务端分页·前端问题排查
ZhengEnCi4 小时前
苹果滑动为什么有「肉感」:橡皮筋越界阻尼与弹簧动画的物理原理
前端
Moment4 小时前
不会后期的我,发现了一个开源胶片神器😍😍😍
前端·后端·开源
L1mbo4 小时前
Lite模式 缓解微信开发者工具卡顿,附 uni-app 实践方案
前端·微信小程序
FungLeo4 小时前
成为全栈·Vue管理后台篇·仪表盘不是几张卡片:组合统计接口与角色视图
前端·javascript·vue.js·rbac·仪表盘·管理后台·tanstack query
SameX5 小时前
HarmonyOS 做桌面卡片 onAddForm 要同步返回但数据在数据库里的解法
前端