Постановка задачи:
Создайте регулярные выражения для следующих проверок:
a) Credit card number (8-16 digits)
b) Date (Format: DD.MM.YYYY)
c) Date (Format: YYYY-MM-DD)
d) Phone Number (Format: +99(99)9999-9999)
e) Number less and equals 255 (positive)
Решения:
Credit card number (8-16 digits)
public static boolean checkCreditCardNumber(String str){
return str.matches("\d{8,16}");
}
Пояснения:
// \d — обозначает любую цифру от 0 до 9.
// {8,16} — указывает, что должно быть не менее 8 и не более 16 цифр подряд.
//Это выражение соответствует любым строкам, состоящим только из цифр длиной от 8 до 16 символов.
Date (Format: DD.MM.YYYY)
public static boolean checkDateFormatEU(String str){
return str.matches("^(0[1-9]|[12][0-9]|3[01])\\.(0[1-9]|1[0-2])\\.\\d{4}$");
}
Date (FormatUS: yyyy-MM-dd)
public static boolean checkDateFormatUS(String str){
return str.matches("^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$");
}
Пояснения:
//Разбор регулярного выражения:
// ^ — начало строки.
// \\d{4} — четыре цифры (год).
// - — обязательный разделитель, дефис.
// (0[1-9]|1[0-2]) — месяц от 01 до 12:
// 0[1-9] — месяцы с 01 по 09.
// 1[0-2] — месяцы с 10 по 12.
// - — снова обязательный разделитель, дефис.
// (0[1-9]|[12][0-9]|3[01]) — день месяца от 01 до 31:
// 0[1-9] — дни с 01 по 09.
// [12][0-9] — дни с 10 по 29.
// 3[01] — дни 30 и 31.
// $ — конец строки.
Phone Number (Format: +99(99)9999-9999)
public static boolean checkPhoneNumber(String str){
return str.matches("^\\+\\d{2}\\(\\d{2}\\)\\d{4}-\\d{4}$");
}
Пояснения:
// \\+ — символ "+" (плюс) перед кодом страны.
// \\d{2} — две цифры, которые представляют код страны (например, 99).
// \\( — открывающая скобка "(", обязательна в номере.
// \\d{2} — две цифры в скобках, которые представляют код региона (например, 99).
// \\) — закрывающая скобка ")".
// \\d{4} — четыре цифры после кода региона (например, 9999).
// - — дефис, обязательный разделитель.
// \\d{4} — еще четыре цифры, представляющие оставшуюся часть номера телефона
Number less and equals 255 (positive)
public static boolean checkLessEquals255(String str){
return str.matches("^(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})$");
}
Пояснения:
//^ — начало строки. Указывает, что совпадение должно начинаться с самого начала строки.
// (25[0-5]|2[0-4]\d|1\d{2}|\d{1,2}) — основная часть выражения, в которой указаны различные варианты чисел от 0 до 255:
// 25[0-5] — соответствует числам от 250 до 255:
// 25 — первые две цифры "25".
// [0-5] — третья цифра может быть от 0 до 5 (т.е. числа от 250 до 255).
// 2[0-4]\d — соответствует числам от 200 до 249:
// 2 — первая цифра всегда "2".
// [0-4] — вторая цифра может быть от 0 до 4 (т.е. числа от 200 до 249).
// \d — любая цифра (соответствует любой цифре от 0 до 9, т.е. числа типа 200–249).
// 1\d{2} — соответствует числам от 100 до 199:
// 1 — первая цифра всегда "1".
// \d{2} — любые две цифры (т.е. числа от 100 до 199).
// \d{1,2} — соответствует числам от 0 до 99:
// \d{1,2} — 1 или 2 цифры, что соответствует числам от 0 до 99.
// $ — конец строки. Указывает, что совпадение должно закончиться в конце строки.
//Итог:
// 25[0-5] — проверяет числа от 250 до 255.
// 2[0-4]\d — проверяет числа от 200 до 249.
// 1\d{2} — проверяет числа от 100 до 199.
// \d{1,2} — проверяет числа от 0 до 99.
//Регулярное выражение гарантирует, что строка будет содержать только числа от 0 до 255.