Validator无法识别RegularExpression数据注释

问题描述 投票:5回答:1

我相信代码是不言自明的。为什么RegularExpression不使用Validator属性?

License.cs:

public class License {
  [Required]
  [RegularExpression("([0-9A-F]{4}\\-){4}[0-9A-F]{4}")]
  public string Code { get; set; }
}

许可证Test.ca

[TestMethod]
public void TestValidationOfCodeProperty()
{
    // These tests pass so I know the regex is not the issue
    Assert.IsTrue(Regex.IsMatch("ABCD-EF01-2345-6789-FFFF", "([0-9A-F]{4}\\-){4}[0-9A-F]{4}"));
    Assert.IsFalse(Regex.IsMatch("abcd-ef01-2345-6789-ff00", "([0-9A-F]{4}\\-){4}[0-9A-F]{4}"));
    Assert.IsFalse(Regex.IsMatch("3331313336323034313135302020202020212121", "([0-9A-F]{4}\\-){4}[0-9A-F]{4}"));

    // Setup Validator
    License lic = new License();
    var ctx = new ValidationContext(lic);
    var results = new List<ValidationResult>();

    // Passes - TryValidateObject returns false because the required field is empty
    lic.Code = "";
    Assert.IsFalse(Validator.TryValidateObject(lic, ctx, results));

    // Passes - TryValidateObject returns true
    lic.Code = "10D0-4439-0002-9ED9-0743";
    Assert.IsTrue(Validator.TryValidateObject(lic, ctx, results));

    // FAILS - TryValidateObject returns true
    lic.Code = "3331313336323034313135302020202020212121";
    Assert.IsFalse(Validator.TryValidateObject(lic, ctx, results));
}      
c# asp.net asp.net-mvc data-annotations
1个回答
9
投票

使用Validator.TryValidateObject(lic, ctx, results, true)

MSDN解释了最后一个论点:https://msdn.microsoft.com/en-us/library/dd411772(v=vs.110).aspx

如果验证所有属性,则为true如果为false,则仅验证所需的属性

© www.soinside.com 2019 - 2024. All rights reserved.