如何仅允许Kendo MaskedTextBox中的有效日期

时间:2014-03-28 14:24:21

标签: regex kendo-ui kendo-maskedtextbox

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

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

以下是我需要的更明确的术语:

MM应该只是以下两者的值: 01,02,03,04,05,06,07,08,09,10,11,12

2 个答案:

答案 0 :(得分:2)

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

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对象并测试它是否正确解析。 / p>

答案 1 :(得分:0)

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

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

您可以执行一组键盘检查,并确保这些部分正确并进行“更正”。我发现这种UI很令人沮丧,而且可能需要做很多工作才能确保你捕获或允许所有可能的排列。

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