Я сделал через "или". Для простоты восприятия разобью основное условие в регулярке на подусловия:
((\+\d{12} (начинается с плюса, без скобок, содержит 12 цифр) [условие 1]
|\+\d{2}\(\d{3}\)\d{7}) (начинается с плюса, после плюса идёт 2 цифры, потом скобки с 3 цифрами внутри и 7 цифр после скобок [условие 1, условие 3, условие 4]
|\(\d{3}\)\d{7} (начинается со скобки, в скобках 3 цифры, потом ещё 7) [условие 2, условие 3, условие 4]
|\d{1}\(\d{3}\)\d{6} (начинается с цифры, потом скобки, в которых 3 цифры, потом ещё 6 цифр) [2 условие, 3 условие, 4 условие]
|\d{10}) (начинается с цифры, содержит только цифры) [2 условие] - !! тестовых данных под этот вариант нет. Сначала сделал без него, после того как не прошло, стал читать условие и пришёл к выводу, что такой расклад попадает под критерии второго условия
Прошу помочь найти проблему
package com.javarush.task.task22.task2212;
/*
Проверка номера телефона
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Solution {
public static boolean checkTelNumber(String telNumber) {
//Pattern pattern = Pattern.compile("((\\+\\w{12}|\\+\\w{2}\\(\\w{3}\\)\\w{7})|\\(\\w{3}\\)\\w{7}|\\w{1}\\(\\w{3}\\)\\w{6})");
//Matcher matcher = pattern.matcher(telNumber);
boolean result = telNumber.matches("((\\+\\d{12}|\\+\\d{2}\\(\\d{3}\\)\\d{7})|\\(\\d{3}\\)\\d{7}|\\d{1}\\(\\d{3}\\)\\d{6}|\\d{10})");
return result;
}
public static void main(String[] args) throws IOException {
//System.out.println(checkTelNumber("+380501234567"));
/*BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < 10; i++) {
String a = reader.readLine();
System.out.println(checkTelNumber(a));
}*/
}
}