RegularExpressionAttribute

RegularExpressionAttribute

我有以下代码来测试类属性:

public class RegExtTest
{
   [RegularExpression(@"^[A-z0-9]{6}$", ErrorMessage = "Lot must be 6 characters alphanumeric")]
    public string Lot { get; set; }
}


和通用扩展方法来验证包含一个或多个这些对象的类

    public static IEnumerable<string> ValidateObject(this object objectToValidate)
    {
        var result = new List<string>();
        var objType = objectToValidate.GetType();
        var properties = objType.GetProperties();
        foreach (var propertyInfo in properties)
        {
            var attrs = propertyInfo.GetCustomAttributes(typeof(ValidationAttribute), true);
            foreach (var attribue in attrs)
            {
                try
                {
                    var validationAttr = attribue as ValidationAttribute;
                    if (validationAttr != null)
                    {
                        validationAttr.Validate(objectToValidate,propertyInfo.Name);
                    }
                }
                catch (Exception e)
                {
                    if (e is ValidationException)
                        result.Add(e.Message);
                }
            }
        }

        return result;
    }


但是,当值为“ a23456”时,验证将失败。我使用Regex类对此单元进行了如下测试:

var isMatch = Regex.IsMatch(lbp.Lot, "^[A-z0-9]{6}$");


以上测试通过。
我在这里做错了什么?我不知道在RegularExpressionAttribute中有一些陷阱吗

最佳答案

您使用的Validate方法错误。

代替

validationAttr.Validate(objectToValidate,propertyInfo.Name);


使用

validationAttr.Validate(propertyInfo.GetValue(objectToValidate, null),propertyInfo.Name);


您必须将属性的实际值传递给Validate方法,因为RegularExpressionAttribute类将仅对.ToString()参数调用value并对照其模式进行检查。

但是使用Validator classas Jay already said in his answer.仍然是最简单的

关于c# - RegularExpressionAttribute总是失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17973861/

10-10 02:20