Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Joi,根据数组长度验证不同的数组模式_Javascript_Reactjs_Validation_Joi - Fatal编程技术网

Javascript Joi,根据数组长度验证不同的数组模式

Javascript Joi,根据数组长度验证不同的数组模式,javascript,reactjs,validation,joi,Javascript,Reactjs,Validation,Joi,我遇到了Joi的一个问题,我一直在努力解决这个问题,我使用了大量不同的语法来尝试解决它 基本上,我们在下面有两个模式。假设下拉列表中有5个选项。如果数组只有一个项,则只需要arraySchemaOne;如果它有多个项,则需要架构1和架构2 const arraySchemaOne = Joi.object({ dropdown: Joi.string().valid('Option 1') }).required(); const arraySchemaTwo = Joi.object

我遇到了Joi的一个问题,我一直在努力解决这个问题,我使用了大量不同的语法来尝试解决它

基本上,我们在下面有两个模式。假设下拉列表中有5个选项。如果数组只有一个项,则只需要arraySchemaOne;如果它有多个项,则需要架构1和架构2

const arraySchemaOne = Joi.object({
    dropdown: Joi.string().valid('Option 1')
}).required();

const arraySchemaTwo = Joi.object({
    dropdown: Joi.string().valid('Option 2')
}).required();

this.validationPattern = Joi.object().pattern(/\w/, Joi.object(
    {
          rows: Joi.ref('rows.length >= 2')
          ?
          Joi.array().items([arraySchemaOne, arraySchemaTwo])
          :
          Joi.array().items([arraySchemaOne])
    }
));

如果有人有任何语法可以帮助解决这个问题,那就太好了。在过去的几天里,我尝试了很多方法,但都无法解决这个问题。

@Katherineg28您可能想查看以下文档,joi API公开了一个
when
方法,您可以将已有的ref作为第一个参数传递,然后用备选模式填充选项。另一方面,如果另一位工程师介绍了该库,您至少应该查看repo上的自述文件,该文件清楚地表明该库的设计没有考虑浏览器


Hi@Katherinegg28您使用Joi作为前端有什么原因吗?Joi对于浏览器验证不是很好,Yup是具有类似API的浏览器替代品。另外,请您解释一下,您试图通过数据而不是模式来实现什么?Joi是由另一位工程师引入的,在所有其他情况下,它都非常适合我们的数据模式。基本上我有一个对象数组。当数组中只有一个项目时,下拉列表的值必须为选项1;当两个项目在数组中时,一个项目的值必须为选项1,另一个项目的值必须为选项2。如果有两个以上的项目,比如5个项目,其中一个必须有选项1的值,另一个必须有选项1,但其他3个项目可以是任何项目。是的,我猜当您没有到达页面底部时,会发生这种情况,但所提供的api涵盖了您想要的实现。我不认为切换到Yup会导致自动解决这个问题。问题在于,如果数组长度是某个数字,那么验证对象数组似乎不是一种简单的方法。这不是使用哪种验证api的问题,而是如何处理特定的验证案例的问题。