I believe the code is pretty self-explanatory. Why isn't the RegularExpression
attribute being used by the Validator
?
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));
}
The regular expression enables you to specify very precisely the format of valid values. The Pattern property contains the regular expression. If the value of the property is null or an empty string (""), the value automatically passes validation for the RegularExpressionAttribute attribute.
We'll use the following Data Annotation attributes: Required – Indicates that the property is a required field. DisplayName – Defines the text to use on form fields and validation messages. StringLength – Defines a maximum length for a string field. Range – Gives a maximum and minimum value for a numeric field.
use Validator.TryValidateObject(lic, ctx, results, true)
MSDN explains the last argument: https://msdn.microsoft.com/en-us/library/dd411772(v=vs.110).aspx
true to validate all properties; if false, only required attributes are validated
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With