我在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; }
但是当我以正确的格式输入日期时,如5/13/2013。它仍然显示错误消息
End Date should be in MM/dd/yyyy format
我缺少哪些代码或上述内容有任何其他错误。
答案 0 :(得分:3)
您无法使用正则表达式验证日期,请使用DateTime.TryParseExact将字符串转换为DateTime对象。正则表达式总会错过闰年等微妙之处。
答案 1 :(得分:1)
您不能使用正则表达式来验证模型中的DateTime,因为正则表达式总是验证字符串值,当您在DateTime上应用它时,它会尝试转换为字符串。该字符串实际上不是MM / dd / YYYY格式,并且始终抛出验证错误。
您可以选择以下方式之一:
答案 2 :(得分:0)
正则表达式的第一部分不允许单个数字月份。你应该把它改成
(@"^([0]?\d|[1][0-2])/..."
请注意?
标记,这意味着0
是可选的。
答案 3 :(得分:0)
查看。我试过这个并不期望它能起作用。
您实际上可以使用RegExp验证MVC中的DateTime 。这是我的设置:
属性上的RegExp属性:
[正则表达式(@“(^ $)|(^ \ 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 =”无效日期“)]
强制验证: 空字符串, MM / dd / yyyy格式的月份/日期的1或2位数字(例如2015年3月20日或2015年3月20日或2015年3月2日), C#日期(例如MM / dd / yyyy hh:mm:ss tt) - 一旦服务器将其转换为C#DateTime
,这就允许ModelState.IsValid为此属性返回trueTextBoxFor on view: @ Html.TextBoxFor(x => x.DateOfWeightAndHeightCapture,“{0:MM / dd / yyyy}”,new {@class =“form-control”})
这使您可以在模型上拥有一个由MVC TextBoxFor编辑的DateTime属性,该属性强制执行客户端和服务器端验证。