Home > Blockchain >  How to detect incomplet date from list and replace with flutter?
How to detect incomplet date from list and replace with flutter?

Time:02-11

Hello I don't find how to detect an incomplet date from listString. I think about regex but don't know how to extract this sequence input.

input=[2022-01-20 20:01, 2022-01-20 21, 2022-01-20 22:25, 2022-01-20 23:01]

Here I tried to match 2022-01-20 21 (it's the only who not have minute) after match I want to add minute :00 to remove wrong date format

Here is what I search to have

output=[2022-01-20 20:01, 2022-01-20 21:00, 2022-01-20 22:25, 2022-01-20 23:01]

here is what I tried

 dateList=[2022-01-20 20:01, 2022-01-20 21, 2022-01-20 22:25, 2022-01-20 23:01];

for (var i = 1; i < dateList.length; i  ) {

        RegExp regExp = new RegExp(           
          r"^((?!:).)*$",
        );

        var match = regExp.firstMatch("${dateList}");
        
        var index = dateList1.indexOf(match);

        dateList.replaceRange(index, index   1, ["$match:00"]);
      }

for each index of my stringlist I seach the only who not have : after I found the index who have a problem, and I replace the index with the add :00

problem match return null...

Thank you

CodePudding user response:

I agree that using regular expressions is the way to go here. Detecting a date is relatively simple, you're basically looking for

4-digits dash 2-digits dash 2-digits space 2-digits colon 2-digits

Which, in RegExp language is

\d{4}-\d{2}-\d{2} \d{2}:\d{2}

Now we can detect whether a given String contains a complete datetime. The only thing that's left is to add the trailing minutes when it is missing. Note that you can decide what to add using another regular expression, but this code will just add the minutes, assuming that's always the issue.

List<String> input = ['2022-01-20 20:01', '2022-01-20 21', '2022-01-20 22:25', '2022-01-20 23:01'];
List<String> output = [];
  
// detect a date   time
RegExp regex = RegExp(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}');
  
for (String maybeDate in input) {
  bool isCompleteDate = regex.hasMatch(maybeDate);
  
  if (isCompleteDate) {
    output.add(maybeDate);
  } else {
    // we want to comlete the String
    // in this case, I assume it's always just the minutes missing, but you could use another regex to see which part is missing
    output.add(maybeDate   ':00');
  }
}
  
print(output);

Alternatively, you can indeed use negative lookahead to find the missing minutes:

// detects a date and hour, without a colon and two digits (the minutes)
RegExp missingMinutes = RegExp(r'(\d{4}-\d{2}-\d{2} \d{2})(?!:\d{2})');

Which, in case you have a String instead of a List<String> would result in

List<String> input = ['2022-01-20 20:01', '2022-01-20 21', '2022-01-20 22:25', '2022-01-20 23:01'];
String listAsString = input.toString();
RegExp missingMinutes = RegExp(r'(\d{4}-\d{2}-\d{2} \d{2})(?!:\d{2})');
List<RegExpMatch?> matches = missingMinutes.allMatches(listAsString).toList();
  
for (int i = matches.length - 1; i >= 0; i--) {
  // walk through all matches
  if (matches[i] == null) continue;
  listAsString = listAsString.substring(0, matches[i]!.end)   ':00'   listAsString.substring(matches[i]!.end);
}
  
print(listAsString);
  • Related