Автор оригинала: 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”