]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
Fix the issue of in strict mode
authorAlanscut <wp_scut@163.com>
Thu, 11 Jun 2020 06:23:31 +0000 (14:23 +0800)
committerIskren Chernev <me@iskren.info>
Sat, 23 Dec 2023 13:39:55 +0000 (15:39 +0200)
src/lib/parse/regex.js
src/lib/units/day-of-month.js
src/lib/units/hour.js
src/lib/units/minute.js
src/lib/units/month.js
src/lib/units/second.js
src/lib/units/week.js
src/test/locale/es-us.js
src/test/moment/create.js

index 9576d01b9e9d3db8116d2cc148541a19cf6201fa..c2cf4e59a827cc405bb18312b3d516d020c138aa 100644 (file)
@@ -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';
index 5ea90194ed3c4397dbbd8cbbb329b3864e5bc740..41b3193d089a82c9edf109d314b888fa0b58132c 100644 (file)
@@ -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.
index b2270badd4e95214c7fed8a532f794d34467998f..f24815f4701210df3b8042b8b1c93228eb4e8245 100644 (file)
@@ -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);
index 8f0c9cab369fcc3873844e88a5e5e28b412dd565..72f163f121867c0190207ac61489016335432d48 100644 (file)
@@ -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);
 
index ff0f79ae870ce2e844fc73ce99fa8a88d1a6e776..a2b90cb3417dbfb5b7dc33c71d1285551d7521e4 100644 (file)
@@ -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);
index 2eab8bd946b11c6ab2515ef95fc8ae56ef730328..814231760b1c810da2041eda67b9ed630af49c94 100644 (file)
@@ -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);
 
index 5d50b3facf6d323fbc8a5c9bd871289666aeee96..2675e5635d0f33e1a8df9552139971bb1cbf86ea 100644 (file)
@@ -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(
index d95494b58d16017df48bc2419096d07efe01b136..f8e19623ffd74ce7d1e844f1390dcba08159bbf8 100644 (file)
@@ -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'
     );
 });
index e4e4f02d23df4951362ba48883798e0876c6bd1a..288610b2c6bbc3395151ff43da7f7957af2a9d1d 100644 (file)
@@ -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,