Необработанное исключение System.StackOverflowException при использовании регулярных выражений в ASP.NET MVC - PullRequest
0 голосов
/ 30 августа 2009

Я использую регулярное выражение для проверки формата предоставленной даты в моем исключении ASP.NET MVC. Однако каждый раз, когда я запускаю его, происходит сбой веб-сервера, а Visual Studio сообщает и необработанное исключение System.StackOverflowException

//If the supplied date does not match the format yyyy-mm-dd
//Regex taken from www.regexlib.com
if(!Regex.Match(date, "^((((19|20)(([02468][048])|([13579][26]))-02-29))|((20[0-9][0-9])|(19[0-9][0-9]))-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))$").Success)
{
    ModelState.AddModelError("Date", "Date is in an invalid format. It must in the format yyyy-mm-dd");
}

Кто-нибудь сталкивался с этим раньше?

1 Ответ

3 голосов
/ 30 августа 2009

Вам не нужно регулярное выражение для проверки DateTime форматов, используйте метод DateTime.TryParseExact:

Преобразует указанную строку представление даты и времени его эквивалент DateTime. Формат строковое представление должно точно соответствует указанному формату. The метод возвращает значение, которое указывает удалось ли преобразование.

Вот пример того, как его использовать:

DateTime dateTime;

if (!DateTime.TryParseExact(
    yourString, 
    "yyyy-MM-dd", 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.None, 
    out dateTime))
{
     ModelState.AddModelError(
         "Date", 
         "Date is in an invalid format. It must in the format yyyy-mm-dd");
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...