正则表达式 – 如何在运行时设置RegularExpression数据注释的正
发布时间:2020-12-14 06:28:52 所属栏目:百科 来源:网络整理
导读:我们管理几个ASP.NET MVC客户端网站,它们都使用如下所示的数据注释来验证客户的电子邮件地址(我没有在这里包含正则表达式,以便可读性): [Required(ErrorMessage="Email is required")][RegularExpression(@"MYREGEX",ErrorMessage = "Email address is not
我们管理几个ASP.NET MVC客户端网站,它们都使用如下所示的数据注释来验证客户的电子邮件地址(我没有在这里包含正则表达式,以便可读性):
[Required(ErrorMessage="Email is required")] [RegularExpression(@"MYREGEX",ErrorMessage = "Email address is not valid")] public string Email { get; set; } 我想做的是集中这个正则表达式,所以如果我们改变它,所有的站点立即拿起来,我们不必在每一个手动更改它. 问题是数据注释的正则表达式参数必须是常量,所以我不能在运行时(从我的第一个想法)中分配一个从配置文件或数据库中检索到的值. 任何人都可以帮助我一个聪明的解决方案,否则,这是一个替代方法,将有助于实现同样的目标?或者这只是要求我们写一个专门的定制验证属性,它将接受非常数值?
最简单的方法是编写一个继承自RegularExpressionAttribute的自定义ValidationAttribute,如下所示:
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})?$"; } } 这样,您仍然使用内置的正则表达式验证,但您可以自定义它.你只需简单地使用它: [Email(ErrorMessage = "Please use a valid email address")] 最后,要让客户端验证工作,您只需在Global.asax中的Application_Start方法中添加以下内容即可告诉MVC对该验证器使用正常的正则表达式验证: DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAttribute),typeof(RegularExpressionAttributeAdapter)); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |