0

我在 MVC 信息文件中声明了一个属性,例如

  [Required(ErrorMessage = "End Date has not being entered")]
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
        [RegularExpression(@"^(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/]\d{4}$", ErrorMessage = "End Date should be in MM/dd/yyyy format")]
        public DateTime? ExpirationDate { get; set; }

但是当我以正确的格式输入日期时,例如 2013 年 5 月 13 日。它仍然显示错误消息

End Date should be in MM/dd/yyyy format

我缺少什么代码或上面有任何其他错误。

4

4 回答 4

3

您无法使用正则表达式验证日期,请使用 DateTime.TryParseExact 将字符串转换为 DateTime 对象。正则表达式总是会错过闰年等细微之处。

于 2013-05-17T11:23:03.880 回答
1

You can't use the Regular expression to validate your DateTime in model, as Regex always validates the string values and when you apply it on DateTime it tries to convert in string. The string actually not in the format of MM/dd/YYYY and always throws the validation error.

Either you can choose one of the following way:

  1. Customize the error message in a resource file
  2. You can create a custom attribute derived from RegularExpressionAttribute and use that instead.
于 2013-05-17T10:02:17.763 回答
0

检查出来。我试过这个,没想到它会起作用。

您实际上可以使用 RegExp 来验证 MVC 中的 DateTime。这是我的设置:


属性上的正则表达式属性:

[正则表达式(@"(^$)|(^\d{2}/\d{2}/\d{4})|(^((\d{1})|(\d{2})) /((\d{1})|(\d{2}))/(\d{4})\s((\d{1})|(\d{2}))[:]{1 }((\d{1})|(\d{2}))[:]{1}((\d{1})|(\d{2}))\s((AM)|(PM )))", ErrorMessage = "无效日期")]


强制验证: 空字符串,月/日的 1 或 2 位数字,格式为 MM/dd/yyyy(例如 3/20/2015 或 03/20/2015 或 3/2/2015), C# 日期(例如 MM/dd /yyyy hh:mm:ss tt) - 这就是允许 ModelState.IsValid 在服务器将其转换为 C# DateTime 后为此属性返回 true 的原因


TextBoxFor 正在查看: @Html.TextBoxFor(x => x.DateOfWeightAndHeightCapture, "{0:MM/dd/yyyy}", new { @class = "form-control" })


这使您可以在模型上拥有一个由 MVC TextBoxFor 编辑的 DateTime 属性,该属性强制客户端和服务器端验证。

于 2015-03-11T17:11:24.247 回答
0

正则表达式的第一部分不允许单个数字月份。你应该把它改成

(@"^([0]?\d|[1][0-2])/..."

请注意?表示0是可选的标记。

于 2013-05-17T09:52:37.167 回答