Как проверить действительный месяц / год между диапазонами

0

Как я могу подтвердить ввод данных от пользователей, следующих за форматом mm/yyyy а также диапазон yyyy - с 2002 по 2030. Таким образом, месяц должен составлять от 1 до 12 а все годы ниже 2002 и 2030 недействительными. Вот мое текущее регулярное выражение:

^(0[1-9]|1[012])[- /.](20)\d\d$
  • 2
    Ответ не должен. Просто запишите числа и проверьте их.
  • 0
    Это система, и я могу только изменить регулярное выражение для проверки ввода
Теги:
validation

4 ответа

2
Лучший ответ

Поскольку вы вынуждены использовать регулярное выражение, вы здесь:

^(0[1-9]|1[012])[- /.](20(?:0[2-9]|[12]\d|30))$

Он работает аналогично шаблону проверки месяца, который вы написали - 0[2-9] соответствует с 2002 по 2009 год, [12]\d соответствует 2010 по 2029 и 30 соответствует 2030.

0

Вы можете проверить по шаблону.. таким образом

<input type="text" pattern="^(0[1-9]|1[012])[- /.](20(?:0[2-9]|[12]\d|30))$" />
0
^(0[1-9]|(1[0-2]+)+)\/(20(0[2-9]|([1-2][0-9])|30))$

Вы можете использовать этот шаблон. Вы также можете проверить его здесь. http://regexr.com/3a60s

Сломать:

^(

  1. 0[1-9]|(1[0-2]+)+)
  2. \/
  3. (20(0[2-9]|([1-2][0-9])|30)

)$

Объяснение:

  1. Соответствует между 01 и 09, или от 10 до 12.
  2. Соответствует вашему " / "
  3. Соответствует 3 годам наборов, начиная с 20.

    • С 2002 по 2009 год с 0[2-9]
    • или с 2010 по 2029 с [1-2][0-9]
    • или 2030, что соответствует буквалу 30
  • 0
    Ваш шаблон соответствует 11111/2002 . Вы должны удалить + после 1[0-2] .
0

Вы можете проверять григорианскую дату с помощью функции 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?

  • 0
    Ваше регулярное выражение позволяет 2039 , не так ли?
  • 0
    Я отредактировал свой ответ, поэтому он не позволяет этого сейчас.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню