Отвечая на Ваш вопрос о регулярном выражении, есть несколько вопросов.
- Критическим является проблема с
(*
в начале (уже указывал ВКС)
- Другой важный вопрос с другой неуместной квантора
+
в d{2}+
- И еще один вопрос, что вы разместили альтернативы в класс символов.
([\w{3}]|[\d{2}])+
означает "выбрать из 2-х вариантов: 1) \w
, {
, 3
или }
, 2) \d
, {
, 2
или }
, 1 или более вхождений".
Итак, ваше регулярное выражение в .NET привкуса регулярного выражения будет выглядеть следующим образом:
^(\p{N}{2})([/-])(\p{L}{3}|\p{N}{2})\2(\p{N}{2,4})$
См demo on RegexStorm that supports .NET regex
И более общая версия ^([0-9]{2})([/-])([a-zA-Z]{3}|[0-9]{2})\2([0-9]{2,4})$
.
Однако, если вы хотите проверить DateTime
значения, записанные в виде строк, вы должны DateTime.TryParseExact
их. Вот пример, который отвечает вашим требованиям:
var fmts = new[] { "dd/MM/yy", "dd/MMM/yyyy", "dd-MM-yy"}; // Allowed formats
DateTime dt;
var valid1 = DateTime.TryParseExact("13/02/15", fmts, new System.Globalization.CultureInfo("en-us"), System.Globalization.DateTimeStyles.None, out dt);
// true
var valid2 = DateTime.TryParseExact("10/Apr/2012", fmts, new System.Globalization.CultureInfo("en-us"), System.Globalization.DateTimeStyles.None, out dt);
// true
var valid3 = DateTime.TryParseExact("23-02-10", fmts, new System.Globalization.CultureInfo("en-us"), System.Globalization.DateTimeStyles.None, out dt);
// true
var valid4 = DateTime.TryParseExact("01-30-15", fmts, new System.Globalization.CultureInfo("en-us"), System.Globalization.DateTimeStyles.None, out dt);
// false
Просьба указать на ошибку в выражении – Sayse
Ваша переменная а '' DateTime' или string'? Я бы использовал перегрузку 'DateTime.TryParseExact', которая принимает' string [] 'как форматы вместо регулярного выражения. –
, вы также можете создать массив регулярных выражений для циклического завершения при проверке – Mivaweb