Laborator 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);
}
}
}