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 the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.