如何验证对象translations属性下的英文(en)翻译字段为必填项?
解决方案
你只需要给translations下的en字段链式调用.required()方法,传入你指定的错误提示即可。Yup会自动校验en字段是否存在,缺失时直接返回你定义的报错信息,同时完全不影响原有其他校验规则的运行,可选语言的校验表现也和你之前的预期一致。
如果你的场景里translations属性本身也可能不存在,也可以给translations对应的对象schema也加上.required()。
修正后的完整代码如下:
const categoryTranslationsSchema = object({ name: string() .min(3, 'Must have at least 3 characters.') .max(16, 'Cannot be longer than 16 characteres.') .required('Must provide a name.') }) const categorySchema = object({ slug: string() .min(3, 'Must have at least 3 characters.') .max(16, 'Cannot be longer than 16 characteres.') .lowercase() .trim() .matches(/^(?![0-9-]+$)(?:[a-z]{2,}-?|[0-9]-?)+(?<!-)$/gm, 'Must start with a letter and can' + ' only contain letters, numbers or dashes (no more than one consecutive).') .required('The slug is required.'), translations: object({ en: categoryTranslationsSchema .required('An English translation is required'), es: categoryTranslationsSchema .default(undefined), de: categoryTranslationsSchema .default(undefined) }) // 如果需要保证translations本身必须存在,去掉下一行的注释 // .required() })
内容的提问来源于stack exchange,提问作者giorgiline
相关产品推荐
相关产品推荐

