gpt4 book ai didi

regex - 如何在运行时设置正则表达式数据注释正则表达式参数?

转载 作者:行者123 更新时间:2023-12-03 13:22:17 26 4
gpt4 key购买 nike

我们管理着多个ASP.NET MVC客户端网站,它们都使用如下数据注释来验证客户的电子邮件地址(为便于阅读,我这里未包括正则表达式):

[Required(ErrorMessage="Email is required")]
[RegularExpression(@"MYREGEX", ErrorMessage = "Email address is not valid")]
public string Email { get; set; }


我想做的就是集中化此正则表达式,这样,如果我们对其进行更改,所有站点都会立即将其选中,而不必在每个站点中都进行手动更改。

问题在于数据注释的regex参数必须是一个常量,因此我无法分配在运行时从配置文件或数据库中检索到的值(这是我的第一个想法)。

有人能为我提供一个解决这个问题的灵巧解决方案的方法吗?或者是失败的替代方法,它可以实现相同的目标?还是这仅要求我们编写一个接受非恒定值的专家自定义验证属性?

最佳答案

最简单的方法是编写一个自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})?$";
}
}


这样,您仍然可以使用内置的Regex验证,但是可以对其进行自定义。您只需像这样使用它即可:

[Email(ErrorMessage = "Please use a valid email address")]


最后,要使客户端验证起作用,您只需在 Application_Start中的 Global.asax方法中添加以下内容,以告诉MVC为此验证器使用常规正则表达式验证:

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAttribute), typeof(RegularExpressionAttributeAdapter));

关于regex - 如何在运行时设置正则表达式数据注释正则表达式参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8431007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com