Валидация Хапи / Джой для числа ошибок - PullRequest
0 голосов
/ 13 марта 2019

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

Схема Joi.

const numcheckschema = Joi.object().keys({
  v1:Joi.number().empty("").allow(null).default(99999),
  v2:Joi.number().empty("").allow(null).default(99999),
  v3:Joi.number().empty("").allow(null).default(99999)
})

Объект

objnum={
  v1:"15",
  v2:"13.",
  v3:"15"
}

objValidated = Joi.validate(objnum, numcheckschema);
console.log(objValidated);

Когда явыполнить вышеупомянутый код, я получаю ошибку

ValidationError: дочерний "v2" завершается неудачно, потому что ["v2" должен быть числом]

согласно документации, когда мыпытается передать любое числовое значение в виде строки , оно преобразует значения в число, но здесь в этом случае мое значение равно 13. , которое не может быть преобразовано вчисло и выбрасывание ошибки.

Есть ли способ, которым мы можем преобразовать это значение в 13.0

1 Ответ

1 голос
/ 16 апреля 2019

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

Joi.string().regex(/\d{1,2}[\,\.]{1}/)

И затем объединить обе проверки, используя Joi.alternatives :

Joi.alternatives().try([
      Joi.number().empty("").allow(null),
      Joi.string().regex(/\d{1,2}[\,\.]{1}/)
])

Однако, я думаю, вам может потребоваться преобразовать полезную нагрузку в число, используя Число (строковое значение) . Вам нужно проверить тип полезной нагрузки, если это не число, вам нужно преобразовать его.

Если вы хотите узнать больше о регулярном выражении, используемом в примере, вы можете проверить его здесь: https://regexr.com/

...