Как я могу подтвердить ввод данных от пользователей, следующих за форматом mm/yyyy
а также диапазон yyyy
- с 2002
по 2030
. Таким образом, месяц должен составлять от 1
до 12
а все годы ниже 2002
и 2030
недействительными. Вот мое текущее регулярное выражение:
^(0[1-9]|1[012])[- /.](20)\d\d$
Поскольку вы вынуждены использовать регулярное выражение, вы здесь:
^(0[1-9]|1[012])[- /.](20(?:0[2-9]|[12]\d|30))$
Он работает аналогично шаблону проверки месяца, который вы написали - 0[2-9]
соответствует с 2002 по 2009 год, [12]\d
соответствует 2010 по 2029 и 30
соответствует 2030.
Вы можете проверить по шаблону.. таким образом
<input type="text" pattern="^(0[1-9]|1[012])[- /.](20(?:0[2-9]|[12]\d|30))$" />
^(0[1-9]|(1[0-2]+)+)\/(20(0[2-9]|([1-2][0-9])|30))$
Вы можете использовать этот шаблон. Вы также можете проверить его здесь. http://regexr.com/3a60s
Сломать:
^(
0[1-9]|(1[0-2]+)+)
\/
(20(0[2-9]|([1-2][0-9])|30)
)$
Объяснение:
/
"Соответствует 3 годам наборов, начиная с 20.
0[2-9]
[1-2][0-9]
30
11111/2002
. Вы должны удалить +
после 1[0-2]
.
Вы можете проверять григорианскую дату с помощью функции checkdate(); однако для этого требуется, чтобы вы были в формате DateTime/Date, это полезно для того, чтобы люди не делали такие вещи, как: 35/02/2014
Однако что-то вроде этого может работать?
([0-2][0-9]|31)\/(0[1-9]|1[0-2])\/(200[2-9]|20[1-2][0-9]|2030)
А затем переведите строку в объект DateTime и запустите функцию checkdate(), чтобы проверить ее gregorian?
2039
, не так ли?