Laborator 1

Lab 1

namespace Labs.Lab1.Validators

{

public interface IRegexValidator

{

bool Validate(string text);

}

}

namespace Labs.Lab1.Validators.Impl

{

internal static class NumberOfDaysInAMonthChecker

{

private static readonly int[] DaysInAMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

public static bool MonthHasAValidNumberOfDays(int day, int month, int year)

{

if (IsLeapYear(year) && month == 2)

{

return day <= 29;

}

return day <= DaysInAMonth[month - 1];

}

private static bool IsLeapYear(int year)

{

if (year % 4 != 0) return false;

if (year % 400 == 0) return true;

return year % 100 != 0;

}

}

}

using System;

using System.Text.RegularExpressions;

namespace Labs.Lab1.Validators.Impl

{

internal class RegexDateValidator : IRegexValidator

{

/// <summary>

/// A date it is considered valid if:

/// The day has 1 or 2 digits

/// The month has 1 or 2 digits

/// The year has 2 or 4 digits

/// I added some extra validations...

/// Validate the number of days in a month

/// </summary>

public bool Validate(string text)

{

var separator = @"\/";

var dayPattern = "^((([1-2][0-9])|([3][0-1]))|([1-9]))";

var monthPattern = "(([1-9])|(1[0-2]))";

var yearPattern = "[0-9][0-9]([0-9][0-9])?";

var pattern = dayPattern + separator + monthPattern + separator + yearPattern + "$";

var regex = new Regex(pattern);

if (!regex.IsMatch(text)) return false;

var splitText = text.Split('/');

var day = splitText[0];

var month = splitText[1];

var year = splitText[2];

var d = int.Parse(day);

var m = int.Parse(month);

var y = int.Parse(year);

if (y < 100)

{

if (y <= DateTime.Today.Year - 2000)

{

y = 2000 + y;

}

else

{

y = 1900 + y;

}

}

return NumberOfDaysInAMonthChecker.MonthHasAValidNumberOfDays(d, m, y);

}

}

}

using System.Text.RegularExpressions;

namespace Labs.Lab1.Validators.Impl

{

internal class RegexSpecialFormatValidator : IRegexValidator

{

public bool Validate(string text)

{

var pattern = @"[A-Z][a-zAZ]*,[a-z]+ [0-9]+(\/.)*(\.|\?)";

var regex = new Regex(pattern);

return regex.IsMatch(text);

}

}

}

using System.Text.RegularExpressions;

namespace Labs.Lab1.Validators.Impl

{

internal class RegexOddFormatValidator : IRegexValidator

{

public bool Validate(string text)

{

var pattern = @"\[\^?((\\.|[^\\\[\]])|(.-[^\\\[\]]))*\]";

var regex = new Regex(pattern);

return regex.IsMatch(text);

}

}

}