C# 日期不起作用的正则表达式;MVC3数据注释

C# 日期不起作用的正则表达式;MVC3数据注释,c#,regex,asp.net-mvc-3,datetime,C#,Regex,Asp.net Mvc 3,Datetime,Im在linq sql类的接口中使用DataAnnotation。 没关系 我对日期时间字段有问题 我的代码如下: [DataType(DataType.Date)] [RegularExpression(@"^([1-9]|0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$", ErrorMessage = "regexFail")] DateTime? DateofBirth { get; set;

Im在linq sql类的接口中使用DataAnnotation。 没关系

我对日期时间字段有问题

我的代码如下:

 [DataType(DataType.Date)]
    [RegularExpression(@"^([1-9]|0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$", ErrorMessage = "regexFail")]
    DateTime? DateofBirth { get; set; }
现在数据类型表达式工作正常,它引入了日期而不是日期时间。 问题在于字段的验证。我的正则表达式与日期不匹配,即使我把它放进引擎,它确实匹配。例如,我将“10/10/2010”放在字段中,得到错误“regexFail”

我相当肯定我的表情是好的,所以我不确定出了什么问题


提前感谢。

我想发生的是,
DateTime
值被转换成字符串,然后与模式匹配。如果是这种情况,并且正在使用
ToString
,则要匹配的字符串中将包含默认时间
12:00:00 AM

我尝试了以下代码并且
IsValid
返回
true

string pattern = @"^([1-9]|0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d\s12:00:00\sAM$";

RegularExpressionAttribute attribute = new RegularExpressionAttribute(pattern) { ErrorMessage = "regexFail" };
DateTime dt = new DateTime(2010, 10, 10);

bool isValid = attribute.IsValid(dt);

[RegularExpression]
属性装饰
DateTime
字段没有任何意义。此属性与字符串类型一起使用。当您拥有DateTime属性时,默认的模型绑定器将使用当前区域性设置将请求值解析为DateTime(假设它是POST请求),如果它是GET请求,则将使用YY-MM-dd格式。因此,正如您所看到的,它是负责将用户HTTP请求转换为DateTime字段实例的默认模型绑定器,而RegularExpression验证器不起作用

因此,如果您想将用户可以输入的日期限制为某种自定义格式,则可以使用日期


其他值类型(如整数和双精度)也是如此。

这是故意采用欧洲风格的日期格式(D/M/Y vs M/D/Y)吗?