Шаблон даты Java, разделенный дефисом - PullRequest
0 голосов
/ 26 апреля 2019

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

Образцы строк

23.04.2019-30.04.2019
3.06.2019-20.06.2019

Шаблон

private final Pattern TIMELINE_PATTERN = Pattern.compile("^\\d{2}.\\d{2}.\\d{4}-\\d{2}.\\d{2}.\\d{4}$");

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Если компоненты дня / месяца могут быть одним или двухзначными символами, то вам следует использовать этот шаблон:

^\d{1,2}\.\d{1,2}\.\d{4}-\d{1,2}\.\d{1,2}\.\d{4}$

Демо

Предположительно, годы могут также не быть фиксированной ширины, но, вероятно, маловероятно, что появится год раньше, чем 1000, поэтому мы можем зафиксировать год на 4 цифры. Кроме того, буквенную точку в шаблоне регулярных выражений необходимо экранировать с помощью обратной косой черты.

Edit:

Если вы хотите сначала проверить строку, а затем разделить две даты, то подумайте:

String input = "3.06.2019-20.06.2019";
if (input.matches("\\d{1,2}\\.\\d{1,2}\\.\\d{4}-\\d{1,2}\\.\\d{1,2}\\.\\d{4}")) {
    String[] dates = input.split("-");
    System.out.println("date1: " + dates[0]);
    System.out.println("date2: " + dates[1]);
}
1 голос
/ 26 апреля 2019

Две проблемы в вашем текущем регулярном выражении,

  • Первый квантификатор должен быть {1,2} вместо просто {2} для поддержки одной или двух цифр
  • Вам нужно выйти из точки

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

^\d{1,2}\.\d{2}\.\d{4}-\d{2}\.\d{2}\.\d{4}$

Regex Demo

Java-код,

List<String> list = Arrays.asList("23.04.2019-30.04.2019", "3.06.2019-20.06.2019");

list.forEach(x -> {
    System.out.println(x + " --> " + x.matches("^\\d{1,2}\\.\\d{2}\\.\\d{4}-\\d{2}\\.\\d{2}\\.\\d{4}$"));
});

печать

23.04.2019-30.04.2019 --> true
3.06.2019-20.06.2019 --> true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...