• ,

level22.lesson13.task03

Все топики прочёл, но решения как-то не обнаружил.
Не проходит проверку сервера, хотя вывод вроде как верный на всех примерах:
public class Solution {

    public static boolean checkTelNumber(String telNumber) {
        String mask = telNumber;

        if (mask.matches("-.*|.*-.*") && !mask.matches(".*-{2}.*")){
            mask = mask.replaceFirst("-", "");
        }
        if (mask.matches(".*-.*")){
            mask = mask.replaceFirst("-", "");
        }
        if (mask.matches(".*\\(\\d{3}\\)\\d*")){
            mask = mask.replace("(", "");
            mask = mask.replace(")", "");
        }

        if (mask.matches("^\\+\\d{12}|\\d{10}"))
            return true;
        else return false;
    }

    public static void main(String[] args){
        System.out.println(checkTelNumber("+380501234567")); // Вывод true
        System.out.println(checkTelNumber("+38(050)1234567")); // Вывод true
        System.out.println(checkTelNumber("8521367985")); // Вывод true
        System.out.println(checkTelNumber("(852)1367985")); // Вывод true
        System.out.println(checkTelNumber("+38050123-45-67")); // Вывод true
        System.out.println(checkTelNumber("050123-4567")); // Вывод true
        System.out.println(checkTelNumber("+38)050(1234567")); // Вывод false
        System.out.println(checkTelNumber("+38(050)1-23-45-6-7")); // Вывод false
        System.out.println(checkTelNumber("050ххх4567")); // Вывод false
        System.out.println(checkTelNumber("050123456")); // Вывод false
        System.out.println(checkTelNumber("1-23456789-0")); // Вывод true
    }
}

3 комментария

bridennis
Нужно больше тестов по каждому условию.
Быстро нашел, что у вас проскакивает как True вот такой номер: +3-8(050)1234567.
А по условию: 4) может содержать 1 пару скобок '(' и ')', причем если она есть, то она расположена левее знаков '-'
I0rik
спасибо, что-то совсем про это условие забыл)
I0rik
  • I0rik
  • 0
  • Комментарий отредактирован 2016-12-12 20:53:21 пользователем I0rik
Поправил и всё равно не принимает.

<code>public class Solution {

    public static boolean checkTelNumber(String telNumber) {
        String mask = telNumber;

        if (mask.matches((".*-.*\\(\\d{3}\\).*|.*-.*-.*\\(\\d{3}\\).*|.*(.*-.*).*"))){
            return false;
        }

        if (mask.matches("-.*|.*-.*") && !mask.matches(".*-{2}.*")){
            mask = mask.replaceFirst("-", "");
        }
        if (mask.matches(".*-.*")){
            mask = mask.replaceFirst("-", "");
        }
        if (mask.matches(".*\\(\\d{3}\\)\\d*")){
            mask = mask.replaceFirst("\\(", "");
            mask = mask.replaceFirst("\\)", "");
        }

        if (mask.matches("^\\+\\d{12}|\\d{10}"))
            return true;
        else return false;
    }

    public static void main(String[] args){
        System.out.println(checkTelNumber("+380501234567"));
        System.out.println(checkTelNumber("+38(050)1234567"));
        System.out.println(checkTelNumber("852--1367985"));
        System.out.println(checkTelNumber("(852)1367985"));
        System.out.println(checkTelNumber("+38050123-45-67"));
        System.out.println(checkTelNumber("050123-4567"));
        System.out.println(checkTelNumber("+38)050(1234567"));
        System.out.println(checkTelNumber("+38(050)1-23-45-6-7"));
        System.out.println(checkTelNumber("050ххх4567"));
        System.out.println(checkTelNumber("050123456"));
        System.out.println(checkTelNumber("1-23456789-0"));
        System.out.println(checkTelNumber("+3-8(050)1234567"));
    }
}</code>

Проверил все условия: реагирует адекватно. Я где-то всё же накосячил или серверу не нравится метод решения?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.