Проверка шаблона регулярных выражений в Java на соответствие 2 десятичным знакам

#java #regex #pattern-matching #decimal-point

Вопрос:

Мне нужно проверить шаблон чисел с 2 десятичными знаками, после каждой десятичной точки он может содержать только до 2 цифр. Он может содержать целое число только до 4 цифр.

Пример: максимальное значение, которое он может вставить, находится в этом формате yyyy.yy.yy

  yyyy - allow without any decimal places
   yyyy.y - allow
   yyyy.y.y - allow
 

yyyy.yyy.yy — не могу разрешить (так как здесь 3 цифры после 1 десятичной запятой)
yyyy.yy.yyy — не могу разрешить (так как здесь 3 цифры после 2 десятичных знаков)

 yyyy.y.yy  - (Allow)
yyyy.yy.y  - (Allow)
 

гггг.гг.г — (Разрешить)

полужирная часть позволяет использовать только до 4 цифр.

В настоящее время, если я использую эту проверку ^[0-9]{1,4}(\.[0-9]{0,2})?$
Эта проверка работает для этого правильно.

 yyyy.yy - maximum value
 

Но я хочу подтвердить это yyyy.yy.yy .Если я использую ^[0-9]{1,4}(\.[0-9]{0,2})(\.[0-9]{0,2})?$
для этого yyyy.yy.yy он не работает должным образом.

Комментарии:

1. Что именно вы пытаетесь сопоставить здесь?

2. я хочу, чтобы этот формат соответствовал yyyy.yy.yy yyy- (может содержать цифры до 4 цифр. минимум 1 число) .yy (могут быть числа до 2 цифр.)

3. гггг — значение также должно быть доступно для вставки без десятичных знаков

Ответ №1:

Ваше регулярное выражение содержит дублирование. Вы можете добавить квантификатор во вторую группу. Попробуйте это регулярное выражение

 ^d{1,4}(.d{0,2}){0,2}$
 

ДЕМОНСТРАЦИЯ

Пример Java

 public static void main(String[] args) {
    String[] arr = new String[] {"1234", "1234.1.2", "1234.22.22", "1234.2", "1.2.3", // all match
                                 "5.555.5", "55555", "5.55.555"}; // all don't match

    for(String s : arr) {
        if(s.matches("^\d{1,4}(\.\d{0,2}){0,2}$")) {
            System.out.println(s);
        }
    }
}
 

Выход

 1234
1234.1.2
1234.22.22
1234.2
1.2.3