加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 如何在运行时设置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));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读