Подскажите из-за чего может не пропускать последнее условие?
Я проверяю и все работает.
package com.javarush.task.task22.task2212;
/*
Проверка номера телефона
*/
public class Solution {
public static boolean checkTelNumber(String telNumber) {
if (telNumber == null) return false;
// Регулярное выражение:
// ^ - начало строки
// ( - начало группы условий (A или B)
// A: \+\d{11} - '+' и 11 цифр (всего 12)
// | - или
// B: (?:\(\d{3}\)|\d{3})\d{7} - 3 цифры в скобках ИЛИ без, затем 7 цифр
// )
// $ - конец строки
// Условие: содержит только 0-9, +, (, ) - \d, +, (, )
// Это выражение требует очистки от лишних символов перед валидацией,
// если в строке могут быть дефисы или пробелы.
//String regex = "^(\\+\\d{12}|(?:\\(\\d{3}\\)|\\d{3})\\d{7})$";
//String regex = "^(?:\\+?\\d*(\\(\\d{3}\\))?\\d*)$";D
String regex = "^(?:(?:\\+?\\d{12})|(?:\\+\\d*(?:\\(\\d{3}\\))\\d{7})|(?:\\d*\\(\\d{3}\\)\\d*))$";
// Дополнительная проверка на допустимые символы
if (!telNumber.matches("^[\\d+()]+$")) return false;
// Финальная проверка
return telNumber.matches(regex);
}
public static void main(String[] args) {
System.out.println(checkTelNumber("+380501234567"));
System.out.println(checkTelNumber("+38(050)1234567"));
System.out.println(checkTelNumber("(050)1234567"));
System.out.println(checkTelNumber("0(501)234567"));
System.out.println(checkTelNumber("+38)050(1234567"));
System.out.println(checkTelNumber("+38(050)123-45-67"));
System.out.println(checkTelNumber("050ххх4567"));
System.out.println(checkTelNumber("050123456"));
System.out.println(checkTelNumber("(0)501234567"));
}
}
оба вариант на не формат возвращают true
тут есть 5 статей про регулярки, первые 3 довольно полезные, правда мне больше понравилось видео с ютюба, там прям очень понятно человек рассказывает, попробую найти его ,нашёл,
вот оно