RegEx可用于XML属性的值

时间:2012-04-17 14:55:35

标签: c# regex

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

我正在尝试使用RegEx来验证该特定属性的输入:

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

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

更新

这是我用来执行RegEx检查的代码:

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

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

<eventQueue mode="discardNew" />

2 个答案:

答案 0 :(得分:4)

我试过这个并且它似乎正常工作(所有以下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也会始终针对RegEx检查DefaultValue。然后它认为它是空字符串,它不会对你的正则表达式进行验证,所以它会抛出异常)。还要考虑addind ^和$到常规模式,否则它不仅会验证discardnew,还会discardnew1,1discardnew等...

答案 1 :(得分:0)

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