Skip to content

Commit 5e2e5b8

Browse files
committed
fix: expanded test cases for datetime validation and updated validation regex
1 parent 6d8367f commit 5e2e5b8

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

src/formats.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ export const fastFormats: DefinedFormats = {
102102
compareTime
103103
),
104104
"date-time": fmtDef(
105-
/^\d\d\d\d-[0-1]\d-[0-3]\d[tT](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:[zZ]|[+-][0-2]\d:[0-5]\d)$/,
105+
/^\d\d\d\d-((0[1-9])|(1[0-2]))-((0[1-9])|([1-2]\d)|(3[01]))[tT](?:(([0-1]\d)|(2[0-3])):[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:[zZ]|[+-](([0-1]\d)|(2[0-3])):[0-5]\d)$/,
106106
compareDateTime
107107
),
108108
"iso-time": fmtDef(

tests/index.spec.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,28 @@ describe("addFormats options", () => {
3838

3939
const validateDatetime = ajv.compile({format: "date-time"})
4040
expect(validateDatetime("2016-12-31T23:59:60Z")).toEqual(true)
41-
expect(validateDatetime("2016-15-31T23:59:60Z")).toEqual(true)
41+
expect(validateDatetime("2015-12-31t23:59:60Z")).toEqual(true)
42+
expect(validateDatetime("2015-02-11t22:59:22Z")).toEqual(true)
43+
expect(validateDatetime("2020-01-01T20:00:00.000Z")).toEqual(true)
44+
expect(validateDatetime("2020-01-01T20:00:00.000Z")).toEqual(true)
45+
expect(validateDatetime("2023-05-04T01:14:00+21:00")).toEqual(true)
46+
expect(validateDatetime("2023-05-04T01:14:10+16:20")).toEqual(true)
47+
expect(validateDatetime("2023-05-04T01:14:21+09:50")).toEqual(true)
48+
expect(validateDatetime("2023-05-04T01:14:21-04:31")).toEqual(true)
49+
expect(validateDatetime("2023-05-04T01:14:21-04:31")).toEqual(true)
50+
expect(validateDatetime("2016-15-31T23:59:60Z")).toEqual(false)
51+
expect(validateDatetime("2015-00-11t22:59:22+00:00")).toEqual(false)
52+
expect(validateDatetime("2015-01-00T22:59:22+00:00")).toEqual(false)
4253
expect(validateDatetime("2016-12-31 23:59:60Z")).toEqual(false)
54+
expect(validateDatetime("2015-02-11t24:59:22Z")).toEqual(false)
55+
expect(validateDatetime("2020-01-01 20:00:00.000")).toEqual(false)
56+
expect(validateDatetime("2020-01-01 20:00:00.000Z")).toEqual(false)
57+
expect(validateDatetime("2023-05-04\t01:14:00+21:00")).toEqual(false)
58+
expect(validateDatetime("2023-05-04\r01:14:10+16:20")).toEqual(false)
59+
expect(validateDatetime("2015-02-11t22:59:22+24:30")).toEqual(false)
60+
expect(validateDatetime("2023-05-04\n01:14:21+09:50")).toEqual(false)
61+
expect(validateDatetime("2023-05-04\n01:14:21-04:31")).toEqual(false)
62+
expect(validateDatetime("2023-05-04t01:14:21-04:31:00")).toEqual(false)
4363
})
4464
})
4565

0 commit comments

Comments
 (0)