web-dev-qa-db-ja.com

Joi検証string()。trim()が機能しない

@ hapi/joiを使用して、明示的な検証と衛生管理を行っています。検証時に、特定のバリデータが機能しません。この例では、trim()は入力文字列の最初と最後の空白を検証しないだけでなく、convertがデフォルトでtrueに設定されていると想定されているため、トリムしません。ただし、有効な電子メールのチェックには、作業とそれぞれのエラーのスローの両方が必要です。また、lowercase()を試しましたが、検証も小文字への変換も行われませんでした。

const Joi = require("@hapi/joi");

const string = Joi.string();

const localRegistrationSchema = Joi.object().keys({
  email: string
    .email()
    .trim()
    .required()
    .messages({
      "string.email": "Email must be a valid email address",
      "string.trim": "Email may not contain any spaces at the beginning or end",
      "string.empty": "Email is required"
    })
});
2
Joel Jacobsen

Joiのバージョン> = 17では、次のようにスキーマを記述できます。

const localRegistrationSchema = Joi.object({ // changes here,
  email: Joi.string() // here
    .email()
    .trim()
    .lowercase() // and here
    .required()
    .messages({
      'string.email': 'Email must be a valid email address',
      'string.trim': 'Email may not contain any spaces at the beginning or end', // seems to be unnecessary
      'string.empty': 'Email is required'
    })
});

console.log(localRegistrationSchema.validate({ email: '' }));
// error: [Error [ValidationError]: Email is required]

console.log(localRegistrationSchema.validate({ email: '  [email protected]' }));
// value: { email: '[email protected]' }

console.log(localRegistrationSchema.validate({ email: '[email protected]  ' }));
// value: { email: '[email protected]' }

console.log(localRegistrationSchema.validate({ email: '[email protected]' }));
// value: { email: '[email protected]' }
4
pzaenger