Joi Validation: имя пользователя не должно быть адресом электронной почты - PullRequest
0 голосов
/ 07 февраля 2020

Есть ли способ сделать это, отрицая встроенный валидатор электронной почты Joi ()?

Примерно такой псевдокод:

username: Joi.string().not.Joi.email()

ИЛИ

username: Joi.string().Joi.email().invert()

Я смог заставить его работать со следующими регулярными выражениями :

const emailRegEx = RegExp('^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$');
const schema2 = Joi.object({
     username: Joi.string().regex(emailRegEx, { invert: true })
 })

1 Ответ

0 голосов
/ 07 февраля 2020

Не уверен, что это будет лучший способ сделать это, но вы можете попробовать это:

const schema = Joi.object().keys({
    username: Joi.alternatives().when(
        Joi.string().email(),
        {
            then: Joi.forbidden().error(new Error('must not be an email')),
            otherwise: Joi.string().required()
        }
     )
});

schema.validate({ username: 'whatever' }); // error: null, value: { username: 'whatever' }

schema.validate({ username: 'my@email.com' }); // error: Error: must not be an email
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...