Реализовать функцию выбора даты и времени с помощью MaskedTextBox. Проверка выполнена с помощью RegEx

2

Я пытаюсь создать настраиваемый элемент управления специально для моего приложения, которое будет использовать maskedTextBox для ограничения введенных входных данных.

Теперь я хочу реализовать это на С#.

class CustomDateMask:System.Windows.Forms.MaskedTextBox

this.Mask = "00/00/2\000"; // For year 2000 and above, date format is "dd/mm/yyyy"
this.ValidatingType = typeof(System.DateTime);

Я видел регулярное выражение для того, чтобы проверять дату, ограничивая дату, захватывая события ввода отпуска и нажатия клавиш.

Теперь мой RegExp выглядит так:

    string regYear  =@"(200[8,9]|201[0-9])";  //for year from 2008-2019  Plz correct this RegEx if wrong.
    string regMonth =@"(0[1-9]|1[012])";
    string regDate  =@"(0[1-9]|[12][0-9]|3[01])";
    string seperator=@"[- /]";

    string ddmmyyyy=regDate+seperator+regMonth+seperator+regYear;

Я видел ссылку относительно регулярного выражения для проверки формата даты. Теперь я хочу использовать этот код в С#, который я предоставил вам в ссылке выше. Этот код написан в Perl, и я хочу сделать ту же функциональность в С#. Но я не знаю, как получить дату, месяц, год из этого регулярного выражения, как показано ниже в приведенном примере. от $1, $2, $3.

sub isvaliddate {
  my $input = shift;
  if ($input =~ m!^((?:19|20)\d\d)[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$!) {
    # At this point, $1 holds the year, $2 the month and $3 the day of the date entered
    if ($3 == 31 and ($2 == 4 or $2 == 6 or $2 == 9 or $2 == 11)) {
      return 0; # 31st of a month with 30 days
    } elsif ($3 >= 30 and $2 == 2) {
      return 0; # February 30th or 31st
    } elsif ($2 == 2 and $3 == 29 and not ($1 % 4 == 0 and ($1 % 100 != 0 or $1 % 400 == 0))) {
      return 0; # February 29th outside a leap year
    } else {
      return 1; # Valid date
    }
  } else {
    return 0; # Not a date
  }
}

Я хочу вернуть часть пользовательской даты, часть месяца и часть года, используя this.DateOnly, this.MonthOnly, this.Year Только для чего мне нужно извлечь эти значения.

Мое главное беспокойство

удерживайте год, месяц и день даты, введенной тремя переменными от maskedTextBox

  • 0
    $ 1, $ 2, $ 3 и т. Д. - это значения перехватов регулярных выражений, названные по позиции.
  • 0
    @ Аноним: Так, как я должен захватить то же самое в C #, нет проблем с позицией, см. Мой regEx ddmmyyyy в этом случае, как мне захватить эти значения
Теги:
winforms

1 ответ

3
Лучший ответ

Perl $1, $2 и $3 эквивалентны С# m.Groups[1].Value, m.Groups[2].Value и т.д.

Чтобы извлечь их в свой пример, вы должны использовать

Match m = Regex.Match(ddmmyyyy);
if (m.Success) {
    string day = m.Groups[1];
    string month = m.Groups[2];
    string year = m.Groups[3];
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню