在ASP.NET MVC中使用正则表达式时未处理的System.StackOverflowException

时间:2009-08-30 11:21:02

标签: c# asp.net-mvc regex validation datetime

我正在使用正则表达式来检查ASP.NET MVC异常中提供的日期的格式。但是,每次运行它时,Web服务器崩溃并且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 个答案:

答案 0 :(得分:3)

您无需使用正则表达式来检查DateTime格式,请使用DateTime.TryParseExact方法:

  

转换指定的字符串   表示日期和时间   它的DateTime等价物。格式   字符串表示必须   完全匹配指定的格式。的的   method返回一个指示的值   转换是否成功。

以下是如何使用它的示例:

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验证解决方案来避免这个问题。