Проверьте значение строки, используя несколько различных диапазонов номеров - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть строка, которая выглядит следующим образом: 20/11 / 2019

Я хотел бы проверить, если:

  • Первое число междуОт 1 до 31
  • второе число от 1 до 12
  • третье число от 2000 до 2999

числа разделены знаком "/".


Я пытался использовать регулярные выражения, но я не знаком с ним.

if (ExpDate.matches("[1-31]/[1-12]/[2000-2999]")){
//something happens
}

Есть ли способ сделать это правильно?

Заранее спасибоза любую помощь.

1 Ответ

1 голос
/ 02 ноября 2019

Предполагая, что это не просто упражнение по использованию регулярных выражений, imho лучше всего использовать инструменты, созданные для работы. Тем более, что можно предположить, что вы будете использовать даты позже в вашем приложении. Попробуйте использовать DateTimeFormatter и LocalDate для управления связанными объектами.

      DateTimeFormatter dfmtr =
            DateTimeFormatter.ofPattern("dd/MM/uuuu").withResolverStyle(
                  ResolverStyle.STRICT);

      for (String testDate : new String[] {
            "20/11/1999", "31/11/2000", "20/11/2019", "32/33/2001",
            "29/02/2016", "29/02/2015"
      }) {
         try {
            LocalDate d = LocalDate.parse(testDate, dfmtr);
            int year = d.getYear();
            if (year < 2000 || year >= 3000) {
               throw new DateTimeParseException(
                     "Year (" + year + ") out of specified range", "uuuu", 6);
            }

            System.out.println("VALID: " + testDate);
         }
         catch (DateTimeParseException dtpe) {
            System.out.println("INVALID DATE: " + dtpe.getLocalizedMessage());
         }
      }

Вы можете даже переформатировать сообщение об ошибке, чтобы оно соответствовало сообщению по умолчанию, или использовать свое собственное вместо сообщения по умолчанию. Это также учитывает високосные годы и правильные дни для данного месяца.

...