2014-03-28 41 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

相關問題