正则表达式,表示 XML 属性的可能值



我有一个XML属性,它有两个可能的值:discardOlddiscardNew(不区分大小写)。

我正在尝试提出一个正则表达式来验证该特定属性的输入:

我试过这个:(?i)(discardnew|discardold)但它似乎不起作用。

任何帮助将不胜感激!谢谢!

更新

这是我用来执行正则表达式检查的代码:

[ConfigurationProperty("mode", IsRequired = true)]
[RegexStringValidator("(?i)(discardnew|discardold)")]
public string Mode
{
    get { return (string)base["mode"]; }
    set { base["mode"] = value; }
}

以下是在 XML 中声明属性的方式:

<eventQueue mode="discardNew" />

我试过这个,它似乎工作正常(所有以下 IsMatch 都返回 true):

Regex R = new Regex("(?i)(discardnew|discardold)");
bool i1 = R.IsMatch("DiscardOld");
bool i2 = R.IsMatch("discardOld");
bool i3 = R.IsMatch("discardOLD");
bool i4 = R.IsMatch("discardneW");
bool i5 = R.IsMatch("Discardnew");
bool i6 = R.IsMatch("dISCARDnew");

问题可能出在其他地方。

更新:这对我有用:

[ConfigurationProperty("mode", IsRequired = true, DefaultValue = "discardnew")]
[RegexStringValidator("^(?i)(discardnew|discardold)$")]
public string Mode
{
    get { return (string)base["mode"]; }
    set { base["mode"] = value; }
}

我刚刚将 DefaultValue = "discardnew" 添加到 ConfigurationProperty。 ASP.NET 总是根据正则表达式检查默认值,即使您没有设置它。然后它认为它是空字符串,这不会针对您的正则表达式进行验证,因此它会抛出 Exception)。还要考虑将 ^ 和 $ 添加到常规模式中,否则它不仅会验证丢弃新,还会验证丢弃新1、1丢弃新等......

(?i) 应该适合你,但你也可以尝试将 RegexOptions.IgnoreCase 枚举值传递给 Match() 方法。

最新更新