C# 如何在数据注释中为此构建正则表达式?

C# 如何在数据注释中为此构建正则表达式?,c#,regex,C#,Regex,我正在做数据注释验证。。。我需要验证一个属性,该属性应该只包含以下单词:“活动”或“终止”。可以用正则表达式来实现吗?因为现在我有了单独的自定义类,如下所示 Class Status { Override IsValid() { if (!(value.ToString().ToUpper() == "ACTIVE" || value.ToString().ToUpper() == "TERMINATION")) return err; } } 以下正则表达式将匹配这些字符串中的

我正在做数据注释验证。。。我需要验证一个属性,该属性应该只包含以下单词:“活动”或“终止”。可以用正则表达式来实现吗?因为现在我有了单独的自定义类,如下所示

Class Status

{

Override IsValid()

{

if (!(value.ToString().ToUpper() == "ACTIVE" || value.ToString().ToUpper() == "TERMINATION"))

return err;

}

}

以下正则表达式将匹配这些字符串中的任意一个,不区分大小写:

/^Active|Termination$/i

如果您感兴趣,您实际上可以创建一个通用的
自定义验证器
,而不是像OP中提到的那样创建一个单独的

下面的代码显示了如何创建自定义验证器

[AttributeUsage(AttributeTargets.Property)]
public class EqualsToTextAttribute : ValidationAttribute
{
    #region Instance Fields

    private readonly string[] textToCompare;

    #endregion

    #region Constructors

    public EqualsToTextAttribute(string[] textToCompare)
    {
        this.textToCompare = textToCompare;
    }

    #endregion

    #region Protected Methods

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value == null || string.IsNullOrWhiteSpace(value.ToString()))
        {
            return ValidationResult.Success;
        }

        if (this.textToCompare.Any(text => string.Equals(value.ToString(), text, StringComparison.OrdinalIgnoreCase)))
        {
            return ValidationResult.Success;
        }
        return new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName));
    }

    #endregion
}
下面的代码显示了如何使用自定义数据注释属性:

    [EqualsToText(new[] { "Active", "Termination" })]
    public string TestString
    {
        get
        {
            return this.testString;
        }
        set
        {
            //This is to test the validation. Can be removed if you are using the control which applies Validation attributes automatically, e.g. DataGrid
            Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "TestString" }); 
            this.testString = value;
        }
    }

如果你只想检查一个字符串是否等于另一个字符串,为什么需要正则表达式?因为这样他就可以使用内置的正则表达式数据注释,而不是创建自定义的正则表达式。实际上,正确的正则表达式应该是
^(active | termination)$
。正斜杠“引号”不是C语言的一部分:这是Perl、PHP之类的语言。此外,您的原始
^active | termination$
将被解析为写入
(^active)|(termination$)
,即行首的“active”或行尾的“termination”。而不是“行的开始,然后是“活动”或“终止”,然后是行的结束。