Joi invalidate a range of numbers

Viewed 303

I am trying to support decimal values for a field but I would like to prevent an inclusive range of numbers.

Expected Validity:

x<=1 || x>=1

So basically, I want to invalidate range [-1,1]. Currently, I have this snippet but needs some help.

Joi.number().required()
1 Answers

You can combine .when with .less and .greater:

Joi.object({
  number: Joi.number().required()
}).when(
  Joi.object({ number: Joi.number().greater(-1).less(1)  }).unknown(), 
  { then: Joi.object({ number: Joi.forbidden() }) }
)

When number contains a value between [-1,1] then it will be forbidden.

Here's some results:

{ number: 0.9 }   // Validation Error: "number" is not allowed
{ number: 0 }     // Validation Error: "number" is not allowed
{ number: -0.3 }  // Validation Error: "number" is not allowed
{ number: 1 }     // Validation Passed
{ number: -1 }    // Validation Passed
{ number: -13 }   // Validation Passed
Related