2012-04-17 69 views
2

我有一个XML属性有两个可能的值:discardOlddiscardNew(不区分大小写)。正则表达式的XML属性的可能值

我试图拿出一个正则表达式来验证输入的特定属性:

我想这一个:(?i)(discardnew|discardold)但它似乎并没有工作。

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

UPDATE

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

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

这是属性是如何在XML声明:

<eventQueue mode="discardNew" /> 
+0

当你说“XML属性”时,你的意思是XML属性(例如'type =“discardOld”')还是XML Text(例如' discardOld')? – user7116 2012-04-17 15:17:23

+1

表达本身很好。向我们展示您使用的代码,因为问题可能在于您如何使用它。 – 2012-04-17 15:18:04

回答

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"); 

问题可能是其他地方。

UPDATE: 这工作FORR我:

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

我刚才添加默认值= “discardnew” 来的ConfigurationProperty。即使您没有设置,ASP.NET也会根据RegEx检查DefaultValue。然后它认为它是空字符串,它不会对您的正则表达式进行验证,所以它会抛出异常)。也可以考虑addind ^和$到常规模式,否则它不但会验证discardnew,还会丢弃new1,1discardnew等...

+0

你似乎是正确的...我用代码解决了我的问题,似乎无法找到我错在哪里... – XenoAce 2012-04-17 15:38:10

+0

谢谢,它解决了问题! – XenoAce 2012-04-17 18:04:02

0

(?i)应该适合您,但您也可以尝试通过RegexOptions.IgnoreCase例如,枚举值的Match()方法。