在ts中使用ajv,在properties中的dataTime满足以下校验条件:(1)必填字段 (2)时间格式不正确,格式为【yyyy-MM-dd hh:mm:ss】 (3)结束时间必须大于开始时间
时间: 2024-01-28 20:04:21 浏览: 166
日期,日期时间类型数据格式校验
可以使用以下代码来实现对properties中的dataTime进行校验:
```typescript
import Ajv from "ajv";
import addFormats from "ajv-formats";
const ajv = new Ajv({allErrors: true});
addFormats(ajv);
ajv.addKeyword('datetime', {
type: 'string',
errors: false,
validate: function(schema, data) {
const dateTimeRegex = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/;
if (!dateTimeRegex.test(data)) {
return false;
}
return true;
}
});
ajv.addKeyword('greaterThan', {
type: 'string',
errors: false,
validate: function(schema, data, parentSchema) {
const startDate = new Date(parentSchema.startDate);
const endDate = new Date(data);
return endDate > startDate;
}
});
const schema = {
type: "object",
properties: {
startDate: { type: "string", format: "date-time" },
endDate: { type: "string", format: "datetime", greaterThan: true },
},
required: ["startDate", "endDate"]
};
const validate = ajv.compile(schema);
const data = {
startDate: "2022-01-01T00:00:00.000Z",
endDate: "2022-01-01 01:00:00",
};
const valid = validate(data);
if (!valid) console.log(validate.errors);
```
其中,使用了ajv-formats库对日期格式进行校验,自定义了两个关键字`datetime`和`greaterThan`,分别用于校验日期格式和结束时间是否大于开始时间。在校验时,需要将开始时间和结束时间分别传入,并在结束时间的校验中使用了`parentSchema`来获取开始时间的值。
阅读全文