0

我有一个将 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;
                    }
        }

当我上传一个带有"27/08/1983"from的 Excel 表时,server它给出了错误,即日期格式对于记录是错误的。

我尝试了同样的localhost操作并完成了调试。它通过正则表达式并成功上传。

日期格式serverlocalhost"dd/MM/yyyy"

其他 excel 表也正在成功上传。

请对此问题有所了解

4

1 回答 1

0

我认为您的问题是当您尝试从字符串创建日期时间对象时,您的代码在此行中崩溃。

date = Convert.ToDateTime(inputstring);

如果您知道您的日期字符串将始终采用该dd/MM/yyyy格式,您可以使用该DateTime.TryParseExact方法从字符串构建日期时间对象。

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;
}
于 2015-12-14T21:33:11.767 回答