MERN栈应用如何实现后端对前端输入车辆牌照的验证与分类
后端实现步骤
第一步:编写车牌验证分类函数
先根据你给出的三类牌照格式编写正则规则,封装为独立的验证函数,方便后续调整复用:
// 车牌验证分类函数 function validateAndClassifyPlate(plateNo) { // 预处理输入:去除首尾空格,合并连续空格为单个,兼容用户输入失误 const plate = plateNo.trim().replace(/\s+/g, ' '); // 三类牌照对应正则规则 const vintageRegex = /^\d{2} ශ්රී \d{4}$/; // 复古款:两位数字+ශ්රී+四位数字 const oldRegex = /^\d{2,3}-\d{4}$/; // 旧款:2-3位数字+横杠+四位数字 const newRegex = /^([A-Z]{2} [A-Z]{2}|[A-Z]{3})-\d{4}$/i; // 新款:两种格式,加i兼容大小写输入 if (vintageRegex.test(plate)) { return { valid: true, type: '复古款' }; } else if (oldRegex.test(plate)) { return { valid: true, type: '旧款' }; } else if (newRegex.test(plate)) { return { valid: true, type: '新款' }; } else { return { valid: false, error: '车牌格式不符合要求,请检查后重新输入' }; } }
第二步:修改接口路由加入验证逻辑
在数据写入数据库前调用验证函数,验证不通过直接返回错误,验证通过后把分类结果存入数据库,同时返回给前端:
// new registration router.post("/registrations/new",(req, res)=>{ const { plateNo } = req.body; // 非空校验 if (!plateNo) { return res.status(400).json({ error: '车牌号码不能为空' }) } // 执行验证分类 const plateCheckResult = validateAndClassifyPlate(plateNo); if (!plateCheckResult.valid) { return res.status(400).json({ error: plateCheckResult.error }) } // 验证通过,把车牌分类结果加入存储数据 // 注意提前在你的Registrations模型中新增plateType字段 let newRegistration = new Registrations({ ...req.body, plateType: plateCheckResult.type }); newRegistration.save((err)=>{ if(err){ return res.status(400).json({ error:err }) } return res.status(200).json({ success:"registration Ok", plateType: plateCheckResult.type // 把分类结果返回给前端使用 }); }); });
可选优化
你可以在前端输入框的onChange逻辑里加上相同的规则校验,提前给用户格式提示,减少无效后端请求,提升使用体验。
内容的提问来源于stack exchange,提问作者Code With Banchi
相关产品推荐
相关产品推荐

