我正在使用正则表达式来检查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");
}
以前有人遇到过这个吗?
答案 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
验证解决方案来避免这个问题。