我有一个上传excel表到数据库的功能。验证之一是检查excel表格中给出的日期格式是否为dd/MM/yyyy
为此,我执行正则表达式检查,如下所示
if (!checkRegex(member["DOB"].ToString().Trim()))
{
ModelState.AddModelError("DOBFORMAT", "Date of Birth is not in dd/MM/YYYY for record " + count + ". Please check");
System.IO.File.Delete(pathToExcelFile);
return View();
}并且正则表达式检查函数是
public bool checkRegex(string inputstring)
{
DateTime date;
string format;
Regex regex = new Regex(@"^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]|(?:Jan|Mar|May|Jul|Aug|Oct|Dec)))\1|(?:(?:29|30)(\/|-|\.)
(?:0?[1,3-9]|1[0-2]|(?:Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\2))
(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)(?:0?2|(?:Feb))\3
(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|
(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9]|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep))|(?:1[0-2]|(?:Oct|Nov|Dec)))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$");
try
{
date = Convert.ToDateTime(inputstring);
format = "dd/MM/yyyy";
string check = date.ToString(format);
if (regex.IsMatch(check))
return true;
else
return false;
}
catch
{
return false;
}
}当我从server上传一个带有"27/08/1983"的excel工作表时,它给出错误,日期格式对于记录是错误的。
我用localhost做了同样的尝试,并进行了调试。传入正则表达式,上传成功。
server和localhost中的日期格式为"dd/MM/yyyy"
其他excel工作表也正在成功上载。
请说明一下这个问题。
发布于 2015-12-15 05:33:12
我认为您的问题是,当您尝试从字符串创建一个datetime对象时,您的代码在下面这一行崩溃。
date = Convert.ToDateTime(inputstring);DateTime parsedDate;
if(DateTime.TryParseExact(inputstring,"dd/MM/yyyy",CultureInfo.CurrentCulture,
DateTimeStyles.None,out parsedDate))
{
// parsedDate is a valid DateTime object now
// return true;
}
else
{
// could not create a valid DateTime object from inputString
// return false;
}https://stackoverflow.com/questions/34263629
复制相似问题