Валидация времени в 24-х часовом формате с помощью регулярного выражения в Java

В данном материале будет рассмотрен один из вариантов валидации времени в 24-х часовом формате средствами регулярных выражений в среде Java. Модульный тест будет написан с применением библиотеки TestNG.

Регулярное выражение для валидации времени в 24-х часовом формате

([01]?[0-9]|2[0-3]):[0-5][0-9]

Пояснения к регулярному выражению:

(        # Начало группы 1
 [01]?[0-9]        # Должно начинаться с 0-9, 00-09 или 10-19.
 |       # Или
 2[0-3]            #  Должно начинаться с 20-23.
)        # Конец группы 1
 :       # Дальше следует двоеточие (:)
  [0-5][0-9]        # После чего должна идти цифра от 0 до 5,
                    # за которой - цифра от 0 до 9, что дает 00...59.

Валидация времени в 24-х часовом формате с помощью регулярного выражения

package ru.j4web.examples.java.regex.time24hoursvalidator;

import java.util.regex.Pattern;

public class Time24HoursValidator {

    private static final String TIME_24_HOURS_PATTERN
            = "([01]?[0-9]|2[0-3]):[0-5][0-9]";

    private final Pattern pattern;

    public Time24HoursValidator() {
        pattern = Pattern.compile(TIME_24_HOURS_PATTERN);
    }

    public boolean validate(String time) {
        return pattern.matcher(time).matches();
    }
}

Корректные форматы времени

В соответствии с логикой работы составленного нами регулярного выражения, корректными форматами дат в 24-х часовом формате будут:

  • 01:00, 02:00, 13:00;
  • 1:00, 2:00, 13:01;
  • 23:59, 15:00;
  • 00:00, 0:00.

Некорректные форматы времени

Форматы времени, которые не удовлетворяют требованиям нашего регулярного выражения:

  • 24:00 – часы выходят за допустимые границы 0 — 23;
  • 12:60 – минуты выходят за допустимые границы 0 — 59;
  • 0:0 – неправильный формат минут, должно быть всегда 2 цифры;
  • 13:1 – неправильный формат минут, должно быть всегда 2 цифры;
  • 101:00 – неправильный формат часов, должно быть не более 2-х цифр.

Тестирования регулярного выражения

package ru.j4web.examples.java.regex.time24hoursvalidator;

import org.junit.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class Time24HoursValidatorTest {

    private static Time24HoursValidator validator;

    @BeforeClass
    public static void setUpClass() throws Exception {
        validator = new Time24HoursValidator();
    }

    @DataProvider
    public Object[][] validTimeProvider() {
        return new Object[][]{
            new Object[]{"01:00"}, new Object[]{"02:00"},
            new Object[]{"13:00"}, new Object[]{"1:00"},
            new Object[]{"2:00"}, new Object[]{"13:01"},
            new Object[]{"00:00"}, new Object[]{"0:00"}
        };
    }

    @DataProvider
    public Object[][] invalidTimeProvider() {
        return new Object[][]{
            new Object[]{"24:00"}, new Object[]{"12:60"},
            new Object[]{"0:0"}, new Object[]{"13:1"},
            new Object[]{"101:00"}
        };
    }

    @Test(dataProvider = "validTimeProvider")
    public void validTimeTest(String time) {
        boolean valid = validator.validate(time);
        System.out.println("Time "" + time + "" is valid: " + valid);
        Assert.assertTrue(valid);
    }

    @Test(dataProvider = "invalidTimeProvider",
            dependsOnMethods = "validTimeTest")
    public void invalidTimeTest(String time) {
        boolean valid = validator.validate(time);
        System.out.println("Time "" + time + "" is valid: " + valid);
        Assert.assertFalse(valid);
    }
}
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running ru.j4web.examples.java.regex.time24hoursvalidator.Time24HoursValidatorTest
Time "01:00" is valid: true
Time "02:00" is valid: true
Time "13:00" is valid: true
Time "1:00" is valid: true
Time "2:00" is valid: true
Time "13:01" is valid: true
Time "00:00" is valid: true
Time "0:00" is valid: true
Time "24:00" is valid: false
Time "12:60" is valid: false
Time "0:0" is valid: false
Time "13:1" is valid: false
Time "101:00" is valid: false
Tests run: 13, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.479 sec

Results :

Tests run: 13, Failures: 0, Errors: 0, Skipped: 0

------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------

Оставить комментарий

Ваш email нигде не будет показанОбязательные для заполнения поля помечены *

*