Рубрики
Без рубрики

Регулярное выражение Java: часть 3 – Сопоставление текста для проверки 2

В последней части мы использовали несколько простых шаблонов для целей проверки входных данных. В этой части мы собираемся применить еще несколько немного сложных шаблонов, в том числе: – Проверка a…

Автор оригинала: Sera.Ng.

В последней части мы использовали несколько простых шаблонов для целей проверки входных данных. В этой части мы собираемся применить еще несколько немного сложных шаблонов, в том числе:

  • Проверка числа в определенном диапазоне, не обязательно от 0 до 9.
  • Проверка символа в определенном диапазоне, не обязательно от а до я.
  • Проверка как чисел, так и символов в предопределенных диапазонах
  • Проверка строки, содержащей заранее определенные символы
  • Проверка строки, не содержащей предопределенных символов

Случай 1: Проверка числа в определенном диапазоне

Предположим, мы просим пользователей ввести номер своего домашнего адреса, который должен быть: по крайней мере, одна цифра, максимум 3 цифры, а цифры должны быть от 5 до 9. Это означает, что цифры 0 из 4 не допускаются. С учетом этих требований у меня есть следующий код:

import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        boolean flag;
        Scanner sc = new Scanner(System.in);
        do {
            String addressPattern = "[5-9]{1,3}";
            System.out.print("Input your house number: ");
            String input = sc.next();
            flag = input.matches(addressPattern);
            if (!flag) System.out.println("Invalid data!");
        } while (!flag);
        System.out.println("Valid data");
    }
}

В приведенном выше коде наиболее важной частью является шаблон:

String addressPattern = "[5-9]{1,3}";

В этом шаблоне я использовал квадратные скобки с 5-9 внутри. Это означает, что совпадающие цифры должны быть от 5 до 9, не обязательно в каком-либо определенном порядке. Сразу после этого следует ограничение на минимальное и максимальное количество цифр {1,3}, с которым вы уже должны быть знакомы. Давайте запустим программу с некоторыми примерами входных данных:

Input your house number: a
Invalid data!
Input your house number: 156
Invalid data!
Input your house number: 78
Valid data

a: очевидно, недопустимо, потому что это не была цифра 156: недопустимо, потому что цифра 1 не находится в диапазоне от 5 до 9 78: полностью допустимо, потому что обе цифры 7 и 8 находятся в диапазоне от 5 до 9, а также в допустимом пределе

Случай 2: Проверка символа в определенном диапазоне

Как и в предыдущем случае, мы также можем потребовать, чтобы пользователи вводили символ, который должен находиться в определенном диапазоне. Например, мы просим пользователей ввести свой домашний адрес, название улицы, которое должно иметь только:

  • Заглавные буквы A – E, включая: A, B, C, D, E
  • Заглавные буквы G – N, включая: G, H, I, J, K, L, M, N

Взгляните на следующий код:

import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        boolean flag;
        Scanner sc = new Scanner(System.in);
        do {
            String addressPattern = "[A-EG-N]{2,8}";
            System.out.print("Input your street name: ");
            String input = sc.next();
            flag = input.matches(addressPattern);
            if (!flag) System.out.println("Invalid data!");
        } while (!flag);
        System.out.println("Valid data");
    }
}

В приведенном выше коде я определил шаблон:

String addressPattern = "[A-EG-N]{2,8}";

Как и в предыдущем случае, я использовал квадратные скобки ([]) для определения желаемых диапазонов символов. Однако в этом случае нам нужно указать 2 диапазона символов:

  • Первый диапазон-от A до E, и он должен быть прописным
  • Второй диапазон-от G до N, и он должен быть прописным

Обратите внимание, что между символами диапазона нет пробелов. И также нет необходимости следовать какому-либо определенному порядку, если введенные символы находятся в диапазоне от пальца ноги или от G до N. И я уверен, что вы знаете значение {2,8}. Запустите программу, и мы получим следующие результаты:

Input your street name: AEF
Invalid data!
Input your street name: OP
Invalid data!
Input your street name: gek
Invalid data!
Input your street name: GEK
Valid data

ЯВЛЯЮТСЯ: недопустимыми, потому что F не находится в указанных диапазонах OP: недопустимо по той же причине gek: недопустимо, потому что, хотя все символы находятся в указанных диапазонах, все они были строчными буквами GEK: полностью соответствовали шаблону

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

Нет причин мешать нам объединять как символы, так и цифры в требуемые диапазоны. Следующий код должен быть объяснен сам по себе:

import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        boolean flag;
        Scanner sc = new Scanner(System.in);
        do {
            String addressPattern = "[1-5A-EG-N]{2,8}";
            System.out.print("Input your street name: ");
            String input = sc.next();
            flag = input.matches(addressPattern);
            if (!flag) System.out.println("Invalid data!");
        } while (!flag);
        System.out.println("Valid data");
    }
}

Опять же, порядок в квадратных скобках не важен. Если вам трудно понять, вот оно:

  • входные цифры должны быть от 1 до 5
  • входные символы должны быть прописными и от A до E или от G до N
  • вводимые символы должны быть не менее 2 и не более 8 символов
  • нет, в то время как пространство разрешено

Запустите программу:

Input your street name: 8ACD
Invalid data!
Input your street name: Gc123
Invalid data!
Input your street name: GC123
Valid data

8 CD: неверно, потому что ввод содержал цифру, которая не находится в диапазоне от 1 до 5 Gc123: неверно, потому что буква c не является прописной GC123: полностью соответствует шаблону

Случай 4: Проверка строки, содержащей заранее определенные одиночные символы

Помимо ограничений с использованием диапазонов, мы также можем использовать символы диапазона ([]) для наложения на заранее определенные одиночные символы. Давайте рассмотрим следующий пример:

import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        boolean flag;
        Scanner sc = new Scanner(System.in);
        do {
            String addressPattern = "[1357ASDF]+";
            System.out.print("Input your street name: ");
            String input = sc.next();
            flag = input.matches(addressPattern);
            if (!flag) System.out.println("Invalid data!");
        } while (!flag);
        System.out.println("Valid data");
    }
}

Узор:

String addressPattern = "[1357ASDF]+";

имеет ли это значение:

  • входная строка должна содержать одно из следующих значений: 1, 3, 5, 6 и прописные буквы: A, S, D, F
  • должно быть указано не менее 1 символа, так как мы использовали плюс (+) знак

Запустите программу, и мы получим:

Input your street name: 12ASD
Invalid data!
Input your street name: 13ACB
Invalid data!
Input your street name: AD57
Valid data

12ASD: неверно, потому что цифра 2 не была одной из предопределенных цифр 13ACB: неверно, потому что буквы C и B не были одними из предопределенных символов AD57: полностью соответствует шаблону Случай 5: Проверка строки, не содержащей предопределенные символы Вместо проверки строки, содержащей символы в заранее определенных диапазонах, мы можем сделать обратное, что означает, что строка не должна содержать определенные символы. Давайте рассмотрим пример:

import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        boolean flag;
        Scanner sc = new Scanner(System.in);
        do {
            String addressPattern = "[^1357ASDF]+";
            System.out.print("Input your street name: ");
            String input = sc.next();
            flag = input.matches(addressPattern);
            if (!flag) System.out.println("Invalid data!");
        } while (!flag);
        System.out.println("Valid data");
    }
}

Взгляните поближе на рисунок:

String addressPattern = "[^1357ASDF]+";

Шаблон выглядит так же, как в предыдущем примере, с одним существенным отличием: символ каретки ( ^ ). Знак каретки (^) означает “кроме”. Таким образом, шаблон будет соответствовать строкам, содержащим любые символы, кроме одного из символов 1357ASDF Запустите программу:

Input your street name: 135ASDF
Invalid data!
Input your street name: QWE
Valid data

135ASDF: недопустимо, потому что все символы в строке не были разрешены QWE: полностью допустимо, потому что не было запрещенных символов

Предыдущая часть

Следующая часть

Посещение learnbyproject.net для бесплатных Курсов регулярного выражения и других бесплатных курсов

Оригинал: “https://www.codementor.io/@seranguyen/java-regular-expression-part-3-matching-text-for-validation-2-r3lnwr612”