yup 自定义校验逻辑(test函数)
GitHub - jquense/yup: Dead simple Object schema validation
import * as yup from 'yup'
import moment from 'moment'
//after today
const dateTestAfterToday = function (value) {
const now = moment(Date.now()).format('YYYY-MM-DD')
if (moment(value).valueOf() <= moment(now).valueOf()) {
return false
} else {
return true
}
}
//after other day
const dateTestAfterOtherDay = function (field) {
return function (value, context) {
if (context.parent[field] && moment(value).valueOf() <= moment(context.parent[field]).valueOf()) {
return false
} else {
return true
}
}
}
//before other day
const dateTestBeforeOtherDay = function (field) {
return function (value, context) {
if (context.parent[field] && moment(value).valueOf() >= moment(context.parent[field]).valueOf()) {
return false
} else {
return true
}
}
}
const getValidationSchema = () => {
const requireMsg = 'This is a required field';
const dateTestAfterTodayMsg = 'Please select a date after today';
const dateTestAfterOtherDayMsg = 'Please select a date after the start date';
const dateTestBeforeOtherDayMsg = 'Please select a date before the end date';
const validationSchema = yup.object({
costStopDate: yup
.string()
.trim()
.required(requireMsg)
.test('costStopDate', dateTestAfterTodayMsg, dateTestAfterToday)
.test(
'costStopDate',
dateTestAfterOtherDayMsg,
dateTestAfterOtherDay('costStartDate')
),
costStartDate: yup
.string()
.trim()
.required(requireMsg)
.test(
'costStartDate',
dateTestBeforeOtherDayMsg,
dateTestBeforeOtherDay('costStopDate')
),
});
return validationSchema;
};
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步