gpt4 book ai didi

c# - RegularExpressionAttribute 总是失败

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:00 25 4
gpt4 key购买 nike

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

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 class 仍然是最简单的, as Jay already said in his answer.

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com