Zod日期字段正则校验异常问题咨询
Zod日期字段正则校验异常问题咨询
嘿,我来帮你分析一下这个问题!首先我直接测试了你提供的正则表达式和值20001915,用原生JavaScript的RegExp.test()方法跑,结果确实是false——和你说的在线校验工具结果一致,按道理Zod应该会拒绝这个值才对。那为什么你的Zod实例会通过它呢?我猜可能有这几个原因:
是不是代码里的正则写错了? 比如有没有不小心把月份部分的
1[0-2]写成了1[0-9]?如果是后者的话,19就会被匹配到,自然就通过校验了。你可以再仔细核对一下你的schema定义里的正则字符串。Zod的使用方式有没有问题? Zod的schema定义好之后,得用
parse()或者safeParse()方法才会触发校验,如果只是定义了schema但直接赋值,那根本没走校验逻辑,自然会“通过”。举个正确的使用例子:const dateSchema = z.string().max(8).regex(new RegExp('^(19[0-9][0-9]|20[0-9][0-9]|[0-1][0-9]{3})(1[0-2]|0[1-9])(3[01]|[0-2][1-9]|[12]0)$')); // 用safeParse查看详细校验结果 const result = dateSchema.safeParse('20001915'); console.log(result); // 正常应该返回success: false,同时包含错误信息是不是Zod版本太旧? 某些早期版本的Zod可能在正则校验上存在bug,你可以尝试升级到最新版的Zod,之后再重新测试看看。
有没有其他链式调用影响了校验? 比如你是不是给schema加了
.optional()或者.nullable()?不过你这个是明确的有效值,所以这个可能性不大,但也可以检查一下schema的完整定义。
另外,非常推荐用safeParse()方法获取详细的校验结果,它会返回一个包含success状态和error详情的对象,能帮你快速定位到底是哪一步出了问题。
备注:内容来源于stack exchange,提问作者Tad
相关产品推荐
相关产品推荐

