【发布时间】:2013-09-20 16:56:19
【问题描述】:
我有 ASP.NET MVC 网页,我使用 DataAnnotation 在客户端验证表单。其中一个视图类具有如下所示的属性:
[StringLength(100, MinimumLength = 3, ErrorMessage = "Länken måste vara mellan 3 och 100 tecken lång")]
[Display(Name = "Länk")]
[RegularExpression(@"^(http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?)?$", ErrorMessage="Länkgen är inte giltlig")]
public string Url { get; set; }
在视图中,我将此代码用于属性:
@Html.LabelFor(c => c.Url, true)
@Html.TextBoxFor(c => c.Url, new { @class = "tb1", @Style = "width:400px;" })
@Html.ValidationMessageFor(model => model.Url)
在这样的 URL 中粘贴时:
http://95rockfm.com/best-voicemail-giving-play-by-play-of-car-accident/
网页将锁定,我无法在网页上执行任何操作。但是,如果我将其粘贴到:
http://95rockfm.com/best-voicemail-giving-play-by-play-of-car-accident
效果很好。
这些 javascript 文件包含在网页底部:
<script type="text/javascript" src="/Scripts/jquery.qtip.min.js"></script>
<script src="/Scripts/jquery-1.7.1.min.js"></script>
<script src="/Scripts/jquery-ui-1.8.20.min.js"></script>
<script src="/Scripts/jquery.validate.min.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.min.js"></script>
在 IE 和 Chrome 中都会出现完全相同的问题。然而,IE 会回来说脚本花了很长时间和一个按钮来停止脚本。但是当切换输入控件时,脚本会再次运行并查看网页。
我没有使用任何自定义的东西,为什么我会得到这个?
【问题讨论】:
-
这种现象称为Catastrophic Backtracking。我无法修复您的正则表达式(我对它们不好)以避免此错误,但在 SO 上有很多类似的问题:stackoverflow.com/questions/14723667/…stackoverflow.com/questions/17116675/…stackoverflow.com/questions/2407870/… 另一篇文章:davetayls.me/blog/2012/10/11/its-a-regexp-catastrophe
标签: asp.net asp.net-mvc regex data-annotations