From 08c41bdc2bf17384a89d94ffe19b4c27f7b4a8d1 Mon Sep 17 00:00:00 2001 From: kwy404 Date: Sat, 26 Sep 2026 19:09:52 -0300 Subject: [PATCH] fix(Form): fix `date` rule rejecting `YYYY-MM-DD` values --- packages/components/common/validator.ts | 3 ++- packages/components/form-item/__test__/form-model.test.js | 8 ++++++++ packages/uniapp-components/common/validator.ts | 3 ++- 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 packages/components/form-item/__test__/form-model.test.js diff --git a/packages/components/common/validator.ts b/packages/components/common/validator.ts index 6b203cd8ae..190e18730d 100644 --- a/packages/components/common/validator.ts +++ b/packages/components/common/validator.ts @@ -66,8 +66,9 @@ export function isDate( const delimiter = opts.delimiters.find((d) => opts.format.includes(d)); if (!delimiter) return false; + const dateDelimiter = opts.strictMode ? delimiter : opts.delimiters.find((d) => (input as string).includes(d)); const formatParts = opts.format.split(delimiter); - const dateParts = input.split(delimiter); + const dateParts = input.split(dateDelimiter); if (formatParts.length !== dateParts.length) return false; let year = ''; diff --git a/packages/components/form-item/__test__/form-model.test.js b/packages/components/form-item/__test__/form-model.test.js new file mode 100644 index 0000000000..3949d4322a --- /dev/null +++ b/packages/components/form-item/__test__/form-model.test.js @@ -0,0 +1,8 @@ +import { validateOneRule } from '../form-model'; + +describe('form-model', () => { + it(': date rule accepts any allowed delimiter', async () => { + expect((await validateOneRule('2024/01/31', { date: true })).result).toBe(true); + expect((await validateOneRule('2024-01-31', { date: true })).result).toBe(true); + }); +}); diff --git a/packages/uniapp-components/common/validator.ts b/packages/uniapp-components/common/validator.ts index 790559a097..5a209366fe 100644 --- a/packages/uniapp-components/common/validator.ts +++ b/packages/uniapp-components/common/validator.ts @@ -84,8 +84,9 @@ export function isDate(input: string | Date, options?: IsDateOptions): boolean { const delimiter = opts.delimiters.find((d) => opts.format.includes(d)); if (!delimiter) return false; + const dateDelimiter = opts.strictMode ? delimiter : opts.delimiters.find((d) => (input as string).includes(d)); const formatParts = opts.format.split(delimiter); - const dateParts = input.split(delimiter); + const dateParts = input.split(dateDelimiter); if (formatParts.length !== dateParts.length) return false; let year = '';