Yup标签数组验证优化:支持非必填、小写校验与数量限制
解决方案
要实现非必填要求(允许null、undefined或空数组),你需要调整两段逻辑:一是让Yup允许字段为null/undefined,二是在自定义测试函数里跳过对空值/空数组的校验。
修改后的完整验证代码如下:
tags: yup.array() .nullable() // 允许字段为null .optional() // 允许字段为undefined .max(14, "Max 14 tags allowed!") .test("is-tag", "All words must be lower case!", (arr) => { // 如果是null/undefined/空数组,直接通过校验 if (!arr || arr.length === 0) return true; // 遍历检查每个标签是否为小写 for (let i = 0; i < arr.length; i++) { if (arr[i] !== arr[i].toLowerCase()) { return false; } } return true; }),
关键改动说明:
- 添加
.nullable():允许字段取值为null - 添加
.optional():允许字段取值为undefined(即表单中完全不提交该字段) - 自定义测试函数开头增加判断:当
arr是null、undefined或空数组时,直接返回true通过校验,避免后续循环报错
内容的提问来源于stack exchange,提问作者Ilmi Jerliu
相关产品推荐
相关产品推荐

