前端输入验证到底该在哪儿做?

Top丶子璐 阅读 30

我最近在做一个用户注册页面,表单里有邮箱、手机号这些字段。后端同事说他们做了校验,但我想在前端也加一层,提升用户体验。可我不确定前端验证到底该做到什么程度?

比如邮箱格式,我用正则 /^S+@S+.S+$/ 简单判断了一下,但听说这种写法其实不严谨。而且如果只靠前端验证,用户绕过浏览器直接发请求不就全漏了?那前端验证还有意义吗?

另外,像手机号这种,不同国家格式不一样,我是不是得引入第三方库?还是说只要做个基本格式检查就行?现在有点纠结,怕做得太多影响性能,做太少又起不到作用。

我来解答 赞 4 收藏
二维码
手机扫码查看
1 条解答
开发者硕泽
这个问题其实困扰过不少人,我直接说结论:前后端都要做,但目的完全不同。

前端验证是为了用户体验,后端验证是为了安全。用户绕过浏览器直接发请求这事儿太常见了,稍微懂点技术的用Postman一调就过去了,所以后端验证绝对不能省,这是底线。但前端验证的意义在于,能帮正常用户快速发现问题,不用等请求发到服务器再返回错误,体验好太多了。

关于邮箱正则,你写的那个确实太宽松了,像 "a@b.c" 这种明显有问题的都能过。实际项目中我一般用这个:

const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$/;

function validateEmail(email) {
if (!email) {
return { valid: false, message: '邮箱不能为空' };
}
if (!emailRegex.test(email)) {
return { valid: false, message: '邮箱格式不正确' };
}
return { valid: true };
}


说实话,完全符合RFC标准的邮箱正则极其复杂,没必要追求完美。上面这个能过滤掉99%的错误输入就够了,真遇到边缘case,后端再兜底。

手机号的问题看你的业务场景。如果只做国内用户,直接用11位数字加1开头的规则就行:

const phoneRegex = /^1[3-9]d{9}$/;


如果要支持国际号码,那就得引入库了,比如 google-libphonenumber,但这玩意儿体积不小,得权衡一下。如果国际化不是刚需,别引入,前端代码膨胀起来很头疼。

再说个实际经验,前端验证别做太重。有些同学喜欢在前端搞一堆复杂规则,什么密码强度检测、用户名敏感词过滤,结果代码又臭又长。这些逻辑放后端做更合适,前端只要保证基本的格式正确和非空校验就够了。

最后给个建议,报错信息要写得人话一点。别整个 "Invalid input" 就完事了,告诉用户具体哪儿错了、怎么改,这才是前端验证的价值所在。
点赞 2
2026-03-01 17:04