【问题标题】:Multiple Separate Regular Expressions多个单独的正则表达式
【发布时间】:2014-08-31 23:49:02
【问题描述】:

我有一个 ASP.NET MVC 应用程序。此应用程序包含一个表单,我需要对其进行多次正则表达式检查,根据问题应该有不同的错误。

有谁知道我会如何处理单独的错误?我曾尝试在一个模型属性上使用多个正则表达式注释,但这会在编译时引发错误。以下是代码示例:

[Required]
[Display(Name = "Distribution List Name")]
[StringLength(65, ErrorMessage = "Must be under 65 characters")]
[RegularExpression("^#(CONTOSO|MEGACORP|TESTCOMPANY)([-_A-Za-z0-9 ]+)$", ErrorMessage = "Invalid company, or the name contains invalid characters (Allowed characters are alphanumeric, - and _)")]
public string Name { get; set; }

理想情况下,我希望在字符串开头检查公司,并通过允许的字符检查来抛出单独的错误消息。

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    您可以考虑的 2 个选项

    一个。创建一个允许多次应用的自定义属性(使用AllowMultiple=true)。

    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple=true)]
    public class MyAttribute: RegularExpressionAttribute
    {
      ....
    }
    

    并在Global.asax.cs注册

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

    注意,我没有测试这是否适用于客户端验证

    b.创建一个自定义验证器并分别测试每个正则表达式并返回相应的消息。

    public class MyAttribute : ValidationAttribute, IClientValidatable
    {
      ....
    }
    

    【讨论】:

    【解决方案2】:

    如果您无法对数据属性进行所有检查。 当您收到表单时,您可以通过执行以下操作以编程方式执行此操作:

    if(!myCheckIsOkay)
        Modelstate.AddModelError("CompanyName", "the check of the company name was not correct")
    //... Do other checks
    if(Model.IsValid)
    //Do something here with valid model
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多