在 Sitecore 中,当我将项目添加到树列表时,我希望树列表只允许没有项目或 2 - 3 个项目。
在项目的模板中,我可以在验证字段中设置 RegEx 来实现这一点。
我在这里找到了这个正则表达式:^.{0,116}$
此正则表达式允许 0-3 个项目。但是我怎么能不允许1?
更新:编辑了我的第一个问题,以更准确地解决我的问题。对不起..
(...{2,3})?
使您的表达式匹配 2 或 3 个项目,并使用 . 使整个表达式可选?
。
想出了我的问题的答案。
这将正确验证:
^(.{0}|.{77,116})$
如果有人有更好的答案,请提交。谢谢您的帮助!
您可以执行以下操作:A(|foo{2,3})B 匹配 AB、AfoofooB 和 AfoofoofooB。
但是,您确实应该考虑也许不使用正则表达式来计算匹配数通常会更好。
答案是“是”(见 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);
无论如何,我希望这能在某种程度上帮助你。