2012-09-24 28 views
0

在Sitecore中,當我將項目添加到我的Treelist時,我希望trereeist只允許沒有項目或2 - 3項。SiteCore中的Treelist RegEx驗證?

在項目的模板中,我可以在驗證字段中設置RegEx來實現此目的。

我發現這個表達式here:^ {0116} $

此正則表達式允許0-3項。但我怎麼能不讓1?

更新:編輯我的第一個問題,以更準確地進入我的問題。對不起..

+0

什麼語言/正則表達式? – geoffspear

+0

您引用的示例是Sitecore列表框中的「驗證」字段。你如何試圖在一個Treelist中使用它? – Les

+0

找到這個鏈接http://bit.ly/jdcUVT,但我怎麼可能設置爲不允許1在這個正則表達式^。{0,116} $ – Raskolnikoov

回答

1

找出我的問題的答案。

這將正確地驗證:

^(.{0}|.{77,116})$ 

如果任何人有一個更好的答案,請提交。謝謝您的幫助!

6
(...{2,3})? 

讓您的表達式匹配2個或3個項目,使整個表達式可選使用?

+0

感謝您的回答。查看我更新的問題以更好地理解我的問題。 :) – Raskolnikoov

0

您可以執行如下操作:A(| foo {2,3})B匹配AB,AfoofooB和AfoofoofooB。

但是,你真的應該考慮,也許不使用正則表達式來計算匹配數通常會更好。

0

答案是肯定的(參見deceze的回答)。但是,您正在添加到列表中,並且向列表添加任何內容都是noop(除非您添加空條目?)。你可以簡單地尋找2或3(... {2,3})。

這就是爲什麼提供問題的背景總是好的,也就是當你得到最好的答案時。

當有2個或3個匹配項時,此示例將添加與您的模式匹配的所有行。

 var list = new List<Match>(); 
     var textlines = @" 
This is a test 
*}|{* 
*}|{**}|{* 
*}|{**}|{**}|{* 
*}|{**}|{**}|{**}|{**}|{**}|{* 
"; 

     var pattern = @"^(\*\}\|\{\*){2,3}$"; 
     var mx = Regex.Matches(textlines, pattern, RegexOptions.Multiline); 

     foreach (Match m in mx) 
      list.Add(m); 

但是,樣本數據是根據您的模式設計的。這真的是你的數據看起來如何?或可能是你無論找什麼東西更像......

 var list = new List<Match>(); 
     var textlines = @" 
This is a test 
*}|{* 
*}|{*blah blah blah*}|{* 
*}|{*blah blah blah*}|{*blah blah blah*}|{* 
*}|{*blah blah blah*}|{*blah blah blah*}|{*blah blah blah*}|{*blah blah blah*}|{*blah blah blah*}|{* 
"; 

     var pattern = @"^([^*]*\*\}\|\{\*){2,3}$"; //notice the change to the pattern 
     var mx = Regex.Matches(textlines, pattern, RegexOptions.Multiline); 

     foreach (Match m in mx) 
      list.Add(m); 

,我希望這可以幫助你一起以某種方式。

+0

謝謝你的回答。查看我更新的問題以更好地理解我的問題。 :) – Raskolnikoov