Mar*_*ell 18 regex validation dynamic data-annotations asp.net-mvc-3
我们管理几个ASP.NET MVC客户端网站,它们都使用如下的数据注释来验证客户电子邮件地址(为了便于阅读,我没有在此处包含正则表达式):
[Required(ErrorMessage="Email is required")]
[RegularExpression(@"MYREGEX", ErrorMessage = "Email address is not valid")]
public string Email { get; set; }
Run Code Online (Sandbox Code Playgroud)
我想要做的是集中这个正则表达式,这样如果我们对它进行更改,所有站点都会立即进行更改,我们不必在每个站点中手动更改它.
问题是数据注释的正则表达式参数必须是常量,所以我不能在运行时分配我从配置文件或数据库中检索到的值(这是我的第一个想法).
任何人都可以帮助我找到一个聪明的解决方案 - 或者失败,这是一种可以实现相同目标的替代方法吗?或者这只是要求我们编写一个专业的自定义验证属性,它将接受非常量值?
Ian*_*dge 30
最简单的方法是编写一个ValidationAttribute继承自的自定义,RegularExpressionAttribute如下所示:
public class EmailAttribute : RegularExpressionAttribute
{
public EmailAttribute()
: base(GetRegex())
{ }
private static string GetRegex()
{
// TODO: Go off and get your RegEx here
return @"^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$";
}
}
Run Code Online (Sandbox Code Playgroud)
这样,您仍然可以使用内置的Regex验证,但您可以自定义它.你只需使用它就像:
[Email(ErrorMessage = "Please use a valid email address")]
Run Code Online (Sandbox Code Playgroud)
最后,要使客户端验证工作,您只需在您的Application_Start方法中添加以下内容Global.asax,告诉MVC对此验证器使用正常的正则表达式验证:
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAttribute), typeof(RegularExpressionAttributeAdapter));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17482 次 |
| 最近记录: |