Как разрешить только допустимые даты в 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 все в порядке, лучше всего использовать любой элемент управления (набор на размытие или перед использованием значения), который гарантирует, что данные в поле являются правильной датой.