如何在剑道掩码文本框中只允许有效日期



我有一个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;对于DD,如果第一个值为0,则下一个值只能为1-9,等等,但对于YYYY,我希望允许000而不是0000。

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

这是我需要的更明确的术语:

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

逐条分解。从最简单的限制开始,月份:

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

然后开始新的一天:

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

然后是年份:

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

最后将它们组合成一个RegEx:

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

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

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

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

你可以做一组keyup检查,确保碎片是正确的,并进行"更正"。但我发现这种UI很令人沮丧,而且要确保捕捉或允许所有可能的排列可能需要大量的工作。

我认为tenub有它的权利,你最好的选择使用任何一个控件将使用一组验证(无论是在模糊或之前消费的值),以确保在字段中的数据是一个适当的日期。

最新更新