2014-03-28 43 views
1

我有一个剑道MaskedTextBox如下所示。如何只允许在一个剑道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

回答

2

将其分解。先从最简单的限制第一,一个月:今年

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

然后:

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

然后移动到当天

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

最后这一切组合成一个正则表达式:

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

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

+0

我试过'rules.Add('0',“/ 0 [1-9] /”);'但它根本不允许任何输入到文本框中。 (这是月份) – JohnAtrik

0

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

我试着为两个字符的代码“JJ”设置一个规则,但那也没用。我也尝试在相同的输入上同时使用MaskedTextBox和DatePicker,但结果不如恒星。

你可以做一组键盘检查,并确保这些部分是正确的,并进行“更正”。尽管如此,我发现这种UI令人沮丧,并且很可能是一大堆工作,以确保您捕获或允许所有可能的排列组合。

我认为tenub是正确的,使用这两种控件的最佳选择是使用一组验证(无论是模糊还是在消费之前),以确保该字段中的数据是正确的日期。

+0

看起来这是一条评论,而不是一个新的答案。你为什么不把这些想法转换成评论,或者如果你觉得可以改进它,编辑tenub的答案? – Anson

相关问题