我有一个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
答案 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是正确的,使用任一控件的最佳选择是使用一组验证(模糊或消耗值之前),以确保字段中的数据是正确的日期。