Search code examples
javascriptnode.jsjoi

How to validate that a string is not equal to another (blacklist) with Joi?


A classical example is:

schema = Joi.object().keys({
    my_string: Joi.string().valid("myString").required()
});

This validate that object have field my_string which must have a myString as value.

How check that key my_string is not equal to notAllowedString?


Solution

  • you can use invalid to blacklist a value (link for ref)

    schema = Joi.object().keys({
        my_string: Joi.string().invalid("notAllowedString").required()
    });
    

    Here's a full example of how you would use it:

    const Joi = require('joi');
    
    const schema = Joi.object({
      someIntA: Joi.number().integer().min(0).required(),
      someIntB: Joi.number()
        .integer()
        .min(0)
        .invalid(Joi.ref('someIntA'))
        .required(),
      someStringA: Joi.string().alphanum().min(3).max(30).required(),
      someStringB: Joi.string()
        .alphanum()
        .min(3)
        .max(30)
        .invalid(Joi.ref('someStringA'))
        .required(),
    });