2012-09-24 30 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