2010-06-21 4 views
1

В моем приложении пользователь может указать шаблон для дат, введя его в текстовое поле. Этот шаблон используется для протоколирования сообщений. Например, если пользователь указать «ДД-ММ», то в файле журнала он мог видеть следующее:C#. Проверка шаблона даты

[12-06] Some message... 
[02-09] Some message 2... 

Как проверить этот шаблон? Как защитить ввод неправильных шаблонов?

+0

Значит, вы знаете, что это дата. Вы хотите убедиться, что он соответствует шаблону даты? – Rake36

+0

Если это в начале месяца, как бы вы могли рассказать разницу между 'dd-MM' и' MM-dd'. Или, может быть, сегодня много сообщений, так что каждая минута должна быть «х-мм»? –

+1

Учитывая комментарий ho1 и вашу проблему. Я предлагаю вам предоставить список опций пользователю вместо разбора введенного текста. –

ответ

3

Самый простой способ - просто попытаться разобрать дату.

DateTime someDate; 

// Valid will be false if it could not parse the date 
bool valid = DateTime.TryParse(yourFormat, out someDate); 
+0

Я бы добавил, если вам нужно проверить в браузере клиента, просто используйте регулярное выражение. – Nordes

+0

DateTime.TryParse() требует строкового представления даты или времени в качестве первого аргумента (а не шаблона для одного). Он не хочет, чтобы «dd-MM» предоставлялся OP; он хочет «12-06», что ОП пытается произвести. – gap

0

Регулярные выражения, вероятно, будут хорошим выбором.

0

Это трудная проблема. Я пробовал:

try 
{ 
    DateTime.Now.ToString(tmpFormatSpec);      
} 
catch (Exception) 
{ 
    // the format spec is known to be bad 
} 

Проблема в том, что шаблоны формата даты являются такими гибкими. Даже вещи, которые не делают информацию о дате допускаются (и не детектируется мой пример кода):

DateTime.Now.ToString("bla"); // no exception raised 

other SO post Смотреть это для еще лучшего способа (я не пробовал еще).

Также см. Обсуждение этой проблемы с комментариями Дж. Скита.

0

Это сложная проблема. Я пробовал:

try 
{ 
    DateTime.Now.ToString(tmpFormatSpec);      
} 
catch (Exception) 
{ 
    // the format spec is known to be bad 
} 

Проблема в том, что шаблоны формата даты являются такими гибкими. Даже вещи, которые не делают информацию о дате допускаются (и не детектируется мой пример кода):

DateTime.Now.ToString("bla"); // no exception raised 

other SO post Смотреть это для еще лучшего способа (я не пробовал еще).

Также см. Это discussion о проблеме, с комментариями J. Skeet.

Смежные вопросы