2013-05-08 62 views
0

我试图通过MVC正则表达式属性对表单字段进行验证。但是,似乎无论使用什么正则表达式,验证只适用于服务器端,但不适用于浏览器。MVC验证正则表达式属性在C#中工作,但不是JavaScript

我使用验证的代码是:

[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""[email protected]"但它开始于"[email protected]"当它不应该通过验证。将正则表达式粘贴到http://regexpal.com/将显示它只能使用完整的电子邮件。

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

如果有帮助,这是被在剑道UI电网编辑弹出使用。

+0

可能想从一个非常相似的问题查看这个答案:http://stackoverflow.com/a/8989157/534109 – 2013-05-08 01:00:36

+0

我看到了一段时间以前,做任何客户端验证。即:它仍然允许我输入行话,而不是阻止除有效电子邮件地址之外的任何输入。 – 2013-05-08 01:09:04

回答

0

你的模型:

[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})(\]?)$ 
+0

我似乎已经绊倒了一些证据,证明这是一个KendoUI问题(无论是或它是一个格式不正确的正则表达式)。当我尝试运行它时,使用该正则表达式会得到一个javascript错误。 ''未捕获的SyntaxError:无效的正则表达式:/ ^(?:^(<>?)$)$ /:范围在字符类中的顺序在kendo.aspnetmvc.min.js中:9 – 2013-05-08 02:11:00

+0

我不是熟悉剑道,但看起来你是对的,这个正则表达式和剑道之间存在不一致。你可以使用Firebug进行调试,但它不会很容易 – Karim 2013-05-08 02:21:16