正则表达式 – 如何在运行时设置RegularExpression数据注释的正则表达式参数?

前端之家收集整理的这篇文章主要介绍了正则表达式 – 如何在运行时设置RegularExpression数据注释的正则表达式参数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们管理几个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));
原文链接:https://www.f2er.com/regex/357122.html

猜你在找的正则表达式相关文章