diff --git a/src/lib/isDate.js b/src/lib/isDate.js index 3a1e4afd2..25c48a216 100644 --- a/src/lib/isDate.js +++ b/src/lib/isDate.js @@ -31,6 +31,10 @@ export default function isDate(input, options) { if (options.strictMode && input.length !== options.format.length) return false; const formatDelimiter = options.delimiters .find(delimiter => options.format.indexOf(delimiter) !== -1); + + // The format's delimiter is not one of the allowed delimiters, so no input can match it. + if (formatDelimiter === undefined) return false; + const dateDelimiter = options.strictMode ? formatDelimiter : options.delimiters.find(delimiter => input.indexOf(delimiter) !== -1); diff --git a/test/validators.test.js b/test/validators.test.js index 98d2a12ff..ca2b49025 100644 --- a/test/validators.test.js +++ b/test/validators.test.js @@ -14671,6 +14671,31 @@ describe('Validators', () => { 'abc.04.05.2024', ], }); + test({ + validator: 'isDate', + args: [{ format: 'DD.MM.YYYY' }], // '.' is not in the default delimiters + invalid: [ + '29.02.2020', + '29/02/2020', + '29-02-2020', + ], + }); + test({ + validator: 'isDate', + args: ['YYYY.MM.DD'], // old format for backward compatibility + invalid: [ + '2020.02.29', + '2020/02/29', + ], + }); + test({ + validator: 'isDate', + args: [{ format: 'YYYY-MM-DD', delimiters: ['/'] }], + invalid: [ + '2020-02-29', + '2020/02/29', + ], + }); // emulating Pacific time zone offset & time // which could potentially result in UTC conversion issues timezone_mock.register('US/Pacific');