【问题标题】:MVC validation regex attribute works in C# but not JavaScriptMVC 验证正则表达式属性适用于 C# 但不适用于 JavaScript
【发布时间】:2013-05-08 00:05:36
【问题描述】:

我正在尝试通过 MVC 正则表达式属性对表单字段进行验证。但是好像不管我用什么正则表达式,验证只在服务器端有效,在浏览器中无效。

我用于验证的代码是:

[DisplayName("Email Address")]
[Required]
[RegularExpression(@"^[a-zA-Z0-9\.-]*@[a-zA-Z0-9\.]*\.[a-zA-Z\.]{2,6}$", ErrorMessage = "Valid email required.")]
public string emailAddress { get; set; }

正则表达式将无法通过"asd""asd@" 的验证,但它在不应该的情况下开始通过"asd@asd" 的验证。将正则表达式粘贴到 http://regexpal.com/ 将表明它应该只适用于完整的电子邮件。

截图:http://puu.sh/2P05x.png

如果有帮助,这将在 Kendo UI 网格编辑弹出窗口中使用。

【问题讨论】:

  • 可能想从一个非常相似的问题中查看这个答案:stackoverflow.com/a/8989157/534109
  • 我刚才看到了,仅此一项实际上并没有进行任何客户端验证。即:它仍然可以让我输入行话,而不是阻止除有效电子邮件地址之外的任何输入。

标签: c# javascript asp.net-mvc kendo-ui


【解决方案1】:

在您的模型上:

[RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,4}\.[0-9]{1,4}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", ErrorMessage = "invalid.")]

并确保您的页面中引用了 jquery.validate.min.jsjquery.validate.unobtrusive.min.js

最后在你的 web.config 中

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

或者如果你想用 JS 来做:

^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,4}\.[0-9]{1,4}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$

【讨论】:

  • 我似乎偶然发现了一些证据表明这是一个 KendoUI 问题(或者它是一个格式错误的正则表达式)。当我尝试运行它时,使用该正则表达式会出现 javascript 错误。 'Uncaught SyntaxError: Invalid regular expression: /^(?:^(&lt;&lt;REMOVED&gt;&gt;?)$)$/: Range out of order in character class' 在 kendo.aspnetmvc.min.js:9
  • 我对剑道并不熟悉,但您似乎是对的,并且这个正则表达式和剑道之间存在不一致。您可以使用 Firebug 对其进行调试,但这并不容易
【解决方案2】:

显然,这是我使用的 KendoUI 版本中当前已知的错误。我不确定是否有适用的更新。在此处了解更多信息,http://www.kendoui.com/forums/mvc/general-discussions/regular-expression-validator-not-working-in-grid-popup.aspx

【讨论】:

    猜你喜欢
    • 2016-06-04
    • 1970-01-01
    • 2015-10-13
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    相关资源
    最近更新 更多