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