0

在 Sitecore 中,当我将项目添加到树列表时,我希望树列表只允许没有项目或 2 - 3 个项目。

在项目的模板中,我可以在验证字段中设置 RegEx 来实现这一点。

我在这里找到了这个正则表达式:^.{0,116}$

此正则表达式允许 0-3 个项目。但是我怎么能不允许1?

更新:编辑了我的第一个问题,以更准确地解决我的问题。对不起..

4

4 回答 4

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

使您的表达式匹配 2 或 3 个项目,并使用 . 使整个表达式可选?

于 2012-09-24T13:30:21.873 回答
1

想出了我的问题的答案。

这将正确验证:

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

如果有人有更好的答案,请提交。谢谢您的帮助!

于 2012-09-24T14:42:16.213 回答
0

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

但是,您确实应该考虑也许不使用正则表达式来计算匹配数通常会更好。

于 2012-09-24T13:34:03.570 回答
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);

无论如何,我希望这能在某种程度上帮助你。

于 2012-09-24T13:56:08.327 回答