From: Alanscut Date: Thu, 11 Jun 2020 06:23:31 +0000 (+0800) Subject: Fix the issue of in strict mode X-Git-Tag: 2.30.0~16^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6367947c3301d9bcb888c70c17bcc3a1486d6d45;p=thirdparty%2Fmoment.git Fix the issue of in strict mode --- diff --git a/src/lib/parse/regex.js b/src/lib/parse/regex.js index 9576d01b9..c2cf4e59a 100644 --- a/src/lib/parse/regex.js +++ b/src/lib/parse/regex.js @@ -18,6 +18,8 @@ var match1 = /\d/, // 0 - 9 // includes scottish gaelic two word and hyphenated months matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, + match1to2NoLeadingZero = /^[1-9]\d?/, // 1-99 + match1to2HasZero = /^([1-9]\d|\d)/, // 0-99 regexes; export { @@ -38,6 +40,8 @@ export { matchShortOffset, matchTimestamp, matchWord, + match1to2NoLeadingZero, + match1to2HasZero, }; import hasOwnProp from '../utils/has-own-prop'; diff --git a/src/lib/units/day-of-month.js b/src/lib/units/day-of-month.js index 5ea90194e..41b3193d0 100644 --- a/src/lib/units/day-of-month.js +++ b/src/lib/units/day-of-month.js @@ -1,6 +1,11 @@ import { makeGetSet } from '../moment/get-set'; import { addFormatToken } from '../format/format'; -import { addRegexToken, match1to2, match2 } from '../parse/regex'; +import { + addRegexToken, + match1to2, + match2, + match1to2NoLeadingZero, +} from '../parse/regex'; import { addParseToken } from '../parse/token'; import { DATE } from './constants'; import toInt from '../utils/to-int'; @@ -11,7 +16,7 @@ addFormatToken('D', ['DD', 2], 'Do', 'date'); // PARSING -addRegexToken('D', match1to2); +addRegexToken('D', match1to2, match1to2NoLeadingZero); addRegexToken('DD', match1to2, match2); addRegexToken('Do', function (isStrict, locale) { // TODO: Remove "ordinalParse" fallback in next major release. diff --git a/src/lib/units/hour.js b/src/lib/units/hour.js index b2270badd..f24815f47 100644 --- a/src/lib/units/hour.js +++ b/src/lib/units/hour.js @@ -6,6 +6,8 @@ import { match2, match3to4, match5to6, + match1to2NoLeadingZero, + match1to2HasZero, } from '../parse/regex'; import { addParseToken } from '../parse/token'; import { HOUR, MINUTE, SECOND } from './constants'; @@ -74,9 +76,9 @@ function matchMeridiem(isStrict, locale) { addRegexToken('a', matchMeridiem); addRegexToken('A', matchMeridiem); -addRegexToken('H', match1to2); -addRegexToken('h', match1to2); -addRegexToken('k', match1to2); +addRegexToken('H', match1to2, match1to2HasZero); +addRegexToken('h', match1to2, match1to2NoLeadingZero); +addRegexToken('k', match1to2, match1to2NoLeadingZero); addRegexToken('HH', match1to2, match2); addRegexToken('hh', match1to2, match2); addRegexToken('kk', match1to2, match2); diff --git a/src/lib/units/minute.js b/src/lib/units/minute.js index 8f0c9cab3..72f163f12 100644 --- a/src/lib/units/minute.js +++ b/src/lib/units/minute.js @@ -1,6 +1,11 @@ import { makeGetSet } from '../moment/get-set'; import { addFormatToken } from '../format/format'; -import { addRegexToken, match1to2, match2 } from '../parse/regex'; +import { + addRegexToken, + match1to2, + match2, + match1to2HasZero, +} from '../parse/regex'; import { addParseToken } from '../parse/token'; import { MINUTE } from './constants'; @@ -10,7 +15,7 @@ addFormatToken('m', ['mm', 2], 0, 'minute'); // PARSING -addRegexToken('m', match1to2); +addRegexToken('m', match1to2, match1to2HasZero); addRegexToken('mm', match1to2, match2); addParseToken(['m', 'mm'], MINUTE); diff --git a/src/lib/units/month.js b/src/lib/units/month.js index ff0f79ae8..a2b90cb34 100644 --- a/src/lib/units/month.js +++ b/src/lib/units/month.js @@ -7,6 +7,7 @@ import { match2, matchWord, regexEscape, + match1to2NoLeadingZero, } from '../parse/regex'; import { addParseToken } from '../parse/token'; import { hooks } from '../utils/hooks'; @@ -49,7 +50,7 @@ addFormatToken('MMMM', 0, 0, function (format) { // PARSING -addRegexToken('M', match1to2); +addRegexToken('M', match1to2, match1to2NoLeadingZero); addRegexToken('MM', match1to2, match2); addRegexToken('MMM', function (isStrict, locale) { return locale.monthsShortRegex(isStrict); diff --git a/src/lib/units/second.js b/src/lib/units/second.js index 2eab8bd94..814231760 100644 --- a/src/lib/units/second.js +++ b/src/lib/units/second.js @@ -1,6 +1,11 @@ import { makeGetSet } from '../moment/get-set'; import { addFormatToken } from '../format/format'; -import { addRegexToken, match1to2, match2 } from '../parse/regex'; +import { + addRegexToken, + match1to2, + match2, + match1to2HasZero, +} from '../parse/regex'; import { addParseToken } from '../parse/token'; import { SECOND } from './constants'; @@ -10,7 +15,7 @@ addFormatToken('s', ['ss', 2], 0, 'second'); // PARSING -addRegexToken('s', match1to2); +addRegexToken('s', match1to2, match1to2HasZero); addRegexToken('ss', match1to2, match2); addParseToken(['s', 'ss'], SECOND); diff --git a/src/lib/units/week.js b/src/lib/units/week.js index 5d50b3fac..2675e5635 100644 --- a/src/lib/units/week.js +++ b/src/lib/units/week.js @@ -1,5 +1,10 @@ import { addFormatToken } from '../format/format'; -import { addRegexToken, match1to2, match2 } from '../parse/regex'; +import { + addRegexToken, + match1to2, + match2, + match1to2NoLeadingZero, +} from '../parse/regex'; import { addWeekParseToken } from '../parse/token'; import toInt from '../utils/to-int'; import { weekOfYear } from './week-calendar-utils'; @@ -11,9 +16,9 @@ addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); // PARSING -addRegexToken('w', match1to2); +addRegexToken('w', match1to2, match1to2NoLeadingZero); addRegexToken('ww', match1to2, match2); -addRegexToken('W', match1to2); +addRegexToken('W', match1to2, match1to2NoLeadingZero); addRegexToken('WW', match1to2, match2); addWeekParseToken( diff --git a/src/test/locale/es-us.js b/src/test/locale/es-us.js index d95494b58..f8e19623f 100644 --- a/src/test/locale/es-us.js +++ b/src/test/locale/es-us.js @@ -486,7 +486,7 @@ test('test short months proper', function (assert) { test('test lenient month parsing', function (assert) { assert.ok( - moment('nov 01, 2015', 'MMM D, YYYY', true).isValid(), + moment('nov 01, 2015', 'MMM DD, YYYY', true).isValid(), 'nov 01, 2015 should parse correctly' ); }); diff --git a/src/test/moment/create.js b/src/test/moment/create.js index e4e4f02d2..288610b2c 100644 --- a/src/test/moment/create.js +++ b/src/test/moment/create.js @@ -2192,8 +2192,8 @@ test('strict parsing', function (assert) { ); assert.equal( moment('2012-05-25', 'YYYY-M-DD', true).isValid(), - true, - 'valid one-digit month' + false, + 'isValid one-digit month' ); assert.equal( moment('2012-05-25', 'YYYY-MM-DD', true).isValid(), @@ -2213,8 +2213,8 @@ test('strict parsing', function (assert) { ); assert.equal( moment('2012-05-02', 'YYYY-MM-D', true).isValid(), - true, - 'valid two-digit day' + false, + 'isValid two-digit day' ); assert.equal( moment('2012-05-02', 'YYYY-MM-DD', true).isValid(), @@ -2250,6 +2250,114 @@ test('strict parsing', function (assert) { 'invalid three-digit milisecond' ); + assert.equal( + moment('2002-05-02 09:30:26', 'YYYY-MM-DD H:mm:ss', true).isValid(), + false, + 'invalid two-digit hour' + ); + + assert.equal( + moment('2002-05-02 11:30:26', 'YYYY-MM-DD H:mm:ss', true).isValid(), + true, + 'valid two-digit hour' + ); + + assert.equal( + moment('2002-05-02 09:30:26', 'YYYY-MM-DD h:mm:ss', true).isValid(), + false, + 'invalid two-digit hour' + ); + + assert.equal( + moment('2002-05-02 11:30:26', 'YYYY-MM-DD h:mm:ss', true).isValid(), + true, + 'valid two-digit hour' + ); + + assert.equal( + moment('2002-05-02 09:30:26', 'YYYY-MM-DD k:mm:ss', true).isValid(), + false, + 'invalid two-digit hour' + ); + + assert.equal( + moment('2002-05-02 11:30:26', 'YYYY-MM-DD k:mm:ss', true).isValid(), + true, + 'valid two-digit hour' + ); + + assert.equal( + moment('2002-05-02 11:09:26', 'YYYY-MM-DD hh:m:ss', true).isValid(), + false, + 'invalid two-digit minute' + ); + + assert.equal( + moment('2002-05-02 11:12:26', 'YYYY-MM-DD hh:m:ss', true).isValid(), + true, + 'valid two-digit minute' + ); + + assert.equal( + moment('2002-05-02 11:09:06', 'YYYY-MM-DD hh:mm:s', true).isValid(), + false, + 'invalid two-digit second' + ); + + assert.equal( + moment('2002-05-02 11:09:16', 'YYYY-MM-DD hh:mm:s', true).isValid(), + true, + 'valid two-digit second' + ); + + assert.equal( + moment('2012-W07', 'YYYY-[W]W', true).isValid(), + false, + 'invalid two-digit week' + ); + + assert.equal( + moment('2012-W17', 'YYYY-[W]W', true).isValid(), + true, + 'valid two-digit week' + ); + + assert.equal( + moment('2012-W07', 'YYYY-[W]w', true).isValid(), + false, + 'invalid two-digit week' + ); + + assert.equal( + moment('2012-W17', 'YYYY-[W]w', true).isValid(), + true, + 'valid two-digit week' + ); + + assert.equal( + moment('08 June 2012', ['D MMMM YYYY'], true).isValid(), + false, + 'invalid two-digit day' + ); + + assert.equal( + moment('18 June 2012', ['D MMMM YYYY'], true).isValid(), + true, + 'valid two-digit day' + ); + + assert.equal( + moment('2012-05-02', 'YYYY-M-DD', true).isValid(), + false, + 'invalid two-digit month' + ); + + assert.equal( + moment('2012-11-02', 'YYYY-M-DD', true).isValid(), + true, + 'valid two-digit month' + ); + assert.equal( moment('1', 'SS', true).isValid(), false,