2012-04-17 66 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()方法。