Ограничение количества цифр в строке

Имеется такое условие.

if (telNumber.matches("^\\d\\(\\d{3}\\)\\d{6}")) return true;

Оно у меня выводит true на такую входную строку 0(501)234567. Но может быть, что первая цифра до начала скобки может быть не одна а не сколько, но всего цифр в строке должно быть не больше 10. В скобках должно быть строго 3 цифры. Как составить выражение на ограничение количества цифр?


Ответы (1 шт):

Автор решения: Alex Rudenko

Можно использовать следующее выражение "^(?=\\d+\\(\\d{3}\\)\\d+).{12}$", использующее positive lookahead для проверки формата:

(?=\d+\(\d{3}\)\d+) - одна или несколько цифр до первой скобки, 3 цифры в скобках, одна или несколько цифр после скобок.

и затем проверка длины строки .{12} для контроля длины 12 = 10 цифр + 2 скобки:

public static boolean isValidPhone(String phone) {
    return phone.matches("(?=\\d+\\(\\d{3}\\)\\d+).{12}");
}

Онлайн демо


Аналогично, можно сперва проверить длину строки без регулярки, а затем проверять формат:

public static boolean isValidPhone(String phone) {
    return phone.length() == 12 && phone.matches("\\d+\\(\\d{3}\\)\\d+");
}
→ Ссылка