1

我有一个如下所示的 Kendo MaskedTextBox。

@(Html.Kendo().MaskedTextBox()
    .Name("kendoMaskedTextBox1")
    .Rules(rules =>
    {
        rules.Add('0', "/[0]{1}[1]{1}/");
    })
    .Mask("00/00/0000")
)

我的问题是如何添加规则,使其具有以下格式:MM/DD/YYYY,但同时不允许 00。基本上,对于 MM/DD 部分,我希望它查看 MM 是否是第一个如果是 0,则下一个值只能是 1-9,如果第一个值为 0,则下一个值只能是 1-9,依此类推,但对于 YYYY,我想允许 000 但不允许 0000。

有人可以帮我开始吗,也许只是 MM 部分,所以我可以自己尝试其他部分?

这是我需要的更清晰的术语:

MM 只能是以下任一值:01、02、03、04、05、06、07、08、09、10、11、12

4

2 回答 2

2

一块一块地分解。首先从最简单的限制开始,即月份:

0[1-9]|1[0-2]

然后继续这一天:

0[1-9]|[12][0-9]|3[01]

然后是年份:

(?!.*0000$)\d{4}

最后将它们组合成一个正则表达式:

^(?:0[1-9]|1[0-2])(?:0[1-9]|[12][0-9]|3[01])(?:(?!.*0000$)\d{4})$

请注意,仍然可以输入无效的日期,例如 2002 年 2 月 31 日,并且真正验证日期的唯一方法是以编程方式从输入字符串创建一个 Date 对象并测试它是否正确解析。

于 2014-03-28T14:35:23.953 回答
0

我很确定在 MaskedTextBox 中,规则中的 RegEx 必须是单个字符的允许集。在你的情况下,你试图让掩码中的“0”代表两个字符/0[1-9]|1[0-2]/,这是它做不到的。您可以为每个数字制定单独的规则,但这仍然允许 00 和 19 几个月。

我尝试为两个字符的代码“JJ”设置规则,但这也不起作用。我还尝试在同一输入上同时使用 MaskedTextBox 和 DatePicker,但结果并不理想。

您可以进行一组键位检查并确保这些部分是正确的并进行“更正”。不过,我发现这种 UI 令人沮丧,而且要确保您捕获或允许所有可能的排列可能需要大量工作。

我认为 Tenub 是对的,使用任一控件的最佳选择是使用一组验证(在模糊时或在使用值之前),以确保字段中的数据是正确的日期。

于 2014-06-13T14:08:06.300 回答