首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式错误触发的MVC3数据注释

正则表达式错误触发的MVC3数据注释
EN

Stack Overflow用户
提问于 2012-05-31 09:56:05
回答 2查看 1.1K关注 0票数 1

我有一个实体框架POCO,它有一个定义如下的属性:

代码语言:javascript
复制
[RegularExpression(ValidationHelper.RegularExpressionForDateOnly)]
public virtual DateTime LastBuildDate { get; set; }

其中常量的定义如下:

代码语言:javascript
复制
public const String RegularExpressionForDateOnly = 
    @"^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$";

我从OWASP上得到了这个正则表达式:https://www.owasp.org/index.php/OWASP_Validation_Regex_Repository

现在,在MVC3视图中,我有:

代码语言:javascript
复制
<tr>
<td class="editor-label">
    @Html.LabelFor(model => model.LastBuildDate)
</td>
<td class="editor-field">
    @Html.EditorFor(model => model.LastBuildDate)
    @Html.ValidationMessageFor(model => model.LastBuildDate)
</td>
</tr>

当我尝试以"05/30/2012“或"5/30/2012”的格式输入日期时,验证失败(客户端和服务器端)。如果我手动尝试该正则表达式,则该正则表达式应该允许这些格式。但是,当MVC3视图使用它进行验证时,它将无法通过验证。

MVC没有通过正则表达式验证的其他原因是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-31 10:03:06

我对正则表达式知之甚少,无法告诉你你到底做错了什么,但是当涉及到MVC3验证器时,我绝对推荐你也可以在Nuget上找到它的Data Annotations Extension。它添加了一系列验证属性,包括日期验证。

票数 2
EN

Stack Overflow用户

发布于 2012-05-31 14:37:36

我只想提一下,当您需要编写特殊类型的验证时,可以使用RemoteValidation属性( http://msdn.microsoft.com/en-us/library/system.web.mvc.remoteattribute(v=vs.98).aspx ),这很简单,因为您不需要制作自定义DataAnnotation适配器,然后在global.asax中注册适配器。

下面是一个例子:

您的模型:

代码语言:javascript
复制
[Remote("ValidateSpecialNumber", HttpMethod="Post", 
    ErrorMessage = "You're number isn't special.")]
public int SpecialNumber { get; set; }

验证时调用的操作:

代码语言:javascript
复制
[HttpPost]
public ActionResult ValidateSpecialNumber(int SpecialNumber)
{
    // validate your number here and return True if validated
    return Json(true);
}

我指出这一点是因为很少有人知道这一点。

问候

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10826525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档