Как разрешить только допустимые даты в 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, если это так, следующее значение может быть только 1-9 для DD, если первое значение равно 0, следующее значение может быть только 1-9 и т. д., но для YYYY я хочу разрешить 000, но не 0000.

Может ли кто-нибудь помочь мне начать с этим, может быть, только часть ММ, чтобы я мог попробовать другие?

Вот что мне нужно в более четких терминах:

Значения MM должны быть только: 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12.

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})$

Обратите внимание, что недопустимые даты все еще могут быть введены, такие как 31.02.2002, и что единственный способ действительно проверить дату - это программно создать объект Date из входной строки и проверить, правильно ли он анализирует.

Я почти уверен, что в MaskedTextBox RegEx в правиле должно быть допустимым набором для одного символа. в вашем случае вы пытаетесь сделать так, чтобы "0" в маске представляло два символа /0[1-9]|1[0-2]/, чего не может быть. Вы можете сделать отдельные правила для каждой цифры, но это все равно позволит 00 и 19 месяцев.

Я попытался установить правило для двухсимвольного кода "JJ", но это тоже не сработало. Я также попытался использовать и MaskedTextBox, и DatePicker вместе на одном входе с менее чем звездными результатами.

Вы можете сделать набор проверок keyup и убедиться, что части верны и сделать "исправления". Я нахожу такой вид пользовательского интерфейса разочаровывающим, и, скорее всего, это будет куча работы, чтобы убедиться, что вы ловите или разрешаете все возможные перестановки.

Я думаю, что у tenub все в порядке, лучше всего использовать любой элемент управления (набор на размытие или перед использованием значения), который гарантирует, что данные в поле являются правильной датой.

Другие вопросы по тегам