From 2897b647a1b3a2999e28e28c021cdb46c68eedef Mon Sep 17 00:00:00 2001
From: "Arthur E. Jones" <PartyLich@gmail.com>
Date: Sun, 3 Jul 2022 09:44:28 -0500
Subject: [PATCH] fix: use more versatile date regex

Previous implementation could not parse dates that are lacking delimiters.

Fix issue #116
---
 .../src/components/modals/ImportTransactions.js | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/packages/loot-design/src/components/modals/ImportTransactions.js b/packages/loot-design/src/components/modals/ImportTransactions.js
index da9832707..4d3e474eb 100644
--- a/packages/loot-design/src/components/modals/ImportTransactions.js
+++ b/packages/loot-design/src/components/modals/ImportTransactions.js
@@ -31,6 +31,18 @@ let dateFormats = [
   { format: 'dd mm yy', label: 'DD MM YY' }
 ];
 
+const reYearFirst = /^(\d{4})(?:[^\d]*)?(\d{2})(?:[^\d]*)?(\d{2})$/;
+const reYearLast = /^(\d{2})(?:[^\d]*)?(\d{2})(?:[^\d]*)?(\d{4})$/;
+const reTwoDig = /^(\d{2})(?:[^\d]*)?(\d{2})(?:[^\d]*)?(\d{2})$/;
+const re = {
+  'yyyy mm dd': reYearFirst,
+  'mm dd yyyy': reYearLast,
+  'dd mm yyyy': reYearLast,
+  'yy mm dd': reTwoDig,
+  'mm dd yy': reTwoDig,
+  'dd mm yy': reTwoDig
+};
+
 function parseDate(str, order) {
   if (typeof str !== 'string') {
     return null;
@@ -40,7 +52,10 @@ function parseDate(str, order) {
     return v && v.length === 1 ? '0' + v : v;
   }
 
-  let parts = str.replace(/ /g, '').split(/[^0-9]/);
+  let parts = str.replace(/\s+/g, '').match(re[order]);
+  if (!parts) return null;
+
+  parts = parts.slice(1);
 
   let year, month, day;
   switch (order) {
-- 
GitLab