Да, проверка; может ли одно и то же поле принимать разные типы? - PullRequest
0 голосов
/ 12 марта 2020

Я довольно новичок в Yup. Я пытаюсь проверить, что поле может быть либо строкой, следующей за определенным регулярным выражением, либо массивом таких строк.

Вот рабочий пример проверки соответствия строки моему регулярному выражению

{ field: yup.string().matches(regex) }

Теперь я хочу, чтобы field также был действительным, если у него есть массив таких строк:

{field: yup.array().of(yup.string().matches(regex))}

Но как мне объединить эти два? Я пытался:

{
  field: yup.mixed().when('field', {
    is: Array.isArray,
    then: yup.array().of(yup.string().matches(regex)),
    otherwise: yup.string().matches(regex)
  })
}

Но я вполне понимаю, что циклическая c ошибка зависимости, так как поле зависит от себя. Какой правильный синтаксис?

1 Ответ

1 голос
/ 12 марта 2020
yup.mixed().test('test-name', 'error-msg', (value) => {
    if (Array.isArray(value))
      for (let i = 0; i < value.length; i++) {
        if (!new RegExp('your-regx').test(value[i])) {
          return false;
        }
      }
    else {
      if (!new RegExp('your-regx').test(value)) {
        return false;
      }
    }
  })
...