我正在尝试验证模式,它不是很复杂,下面是我的代码
Joi.object({
mobile: Joi.string()
.label('mobile')
.pattern(/^(\+)[1-9]\d{7,14}$/)
.messages({
'string.pattern.base': 'Invalid mobile number',
}),
email: Joi.string()
.email({ tlds: { allow: false } })
.label('email')
.messages({
'string.email': 'Invalid email address',
}),
fullName: Joi.string()
.label('fullName')
.pattern(/^[A-Za-z]+[A-Za-z\s]*$/)
.max(100)
.messages({
'string.pattern.base': 'The fullName must be a valid string',
}),
firstName: Joi.string()
.regex(/^[A-Za-z\s]+$/i)
.label('first name')
.messages({
'string.pattern.base': 'Only alphabets are allowed in first name.',
}),
middleName: Joi.string()
.regex(/^[A-Za-z\s]+$/i)
.label('middle name')
.messages({
'string.pattern.base': 'Only alphabets are allowed in middle name.',
'any.required': 'Middle name is required.',
}),
lastName: Joi.string()
.regex(/^[A-Za-z\s]+$/i)
.label('last name')
.messages({
'string.pattern.base': 'Only alphabets are allowed in last name.',
'any.required': 'Last name is required.',
}),
}).or(
'mobile',
'email'
).messages({
'object.missing': 'Either mobile number or email is required',
}).or(
'fullName',
'firstName'
).messages({
'object.missing': 'Either full name or first name is required',
}).with(
'firstName',
'lastName'
).messages({
'object.with': 'If first name is provided, last name is required',
})
现在它的验证工作正常,但问题是,当我们不提供电子邮件和手机时,消息会显示需要全名或名字而不是**需要手机号码或电子邮件**,所以我该如何解决它
我尝试过多次放置,甚至使用了异或,但没有成功。请帮忙
试试这个
Joi.object({
mobile: Joi.string()
.label('mobile')
.pattern(/^(\+)[1-9]\d{7,14}$/)
.messages({
'string.pattern.base': 'Invalid mobile number',
}),
email: Joi.string()
.email({ tlds: { allow: false } })
.label('email')
.messages({
'string.email': 'Invalid email address',
}),
fullName: Joi.string()
.label('fullName')
.pattern(/^[A-Za-z]+[A-Za-z\s]*$/)
.max(100)
.messages({
'string.pattern.base': 'The full name must be a valid string',
}),
firstName: Joi.string()
.regex(/^[A-Za-z\s]+$/i)
.label('first name')
.messages({
'string.pattern.base': 'Only alphabets are allowed in first name.',
}),
middleName: Joi.string()
.regex(/^[A-Za-z\s]+$/i)
.label('middle name')
.messages({
'string.pattern.base': 'Only alphabets are allowed in middle name.',
'any.required': 'Middle name is required.',
}),
lastName: Joi.string()
.regex(/^[A-Za-z\s]+$/i)
.label('last name')
.messages({
'string.pattern.base': 'Only alphabets are allowed in last name.',
'any.required': 'Last name is required.',
}),
})
.or('mobile', 'email')
.messages({
'object.missing': 'Either mobile number or email is required',
})
.or('fullName', 'firstName')
.messages({
'object.missing': 'Either full name or first name is required',
})
.with('firstName', 'lastName')
.messages({
'object.with': 'If first name is provided, last name is required',
});
我猜错误显示是因为 .or() 和 .with() 方法的解释顺序可能不会产生预期的错误消息。