4.5. Bardziej restrykcyjna weryfikacja tradycyjnych formatów zapisu daty

Problem

Chcemy weryfikować daty w tradycyjnych formatach mm/dd/yy, mm/dd/yyyy, dd/mm/yy oraz dd/mm/yyyy. Tym razem jednak chcemy odrzucać nieprawidłowe daty, jak 31 lutego.

Rozwiązanie

C#

Numer miesiąca przed numerem dnia:

DateTime foundDate;
Match matchResult = Regex.Match(SubjectString,
    "^(?<month>[0-3]?[0-9])/(?<day>[0-3]?[0-9])/" +
    "(?<year>(?:[0-9]{2})?[0-9]{2})$");
if (matchResult.Success) {
    int year = int.Parse(matchResult.Groups["year"].Value);
    if (year < 50) year += 2000;
    else if (year < 100) year += 1900;
    try {
        foundDate = new DateTime(year,
            int.Parse(matchResult.Groups["month"].Value),
            int.Parse(matchResult.Groups["day"].Value));
    } catch {
        // Nieprawidłowa data. } } ...

Get Wyrażenia regularne. Receptury now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.