2015-04-01 58 views
4

我相信代碼是不言自明的。爲什麼Validator不使用RegularExpression屬性?RegularExpression數據註釋沒有被驗證器識別

License.cs:

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

LicenseTest.cs

[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)); 
}  

回答