Кажется, что с двумя форматами это будет проще. Пусть x будет ди git.
- xxx, затем -xxx- или xxx, а затем xxxx.
Predicate<String> check =
s -> s.matches("^\\[1-9]\\d{2}((-\\d{3}-)|(\\d{3}))\\d{4}$");
List<String> phoneNumbers = new ArrayList<>(
List.of("123-456-7890", "123456789", "1234-55-888",
"1234567898", "112-", "123456689001"));
for (String phone : phoneNumbers) {
System.out.printf("%8s -> %s%n",
check.test(phone) ? "valid" : "invalid", phone);
}
Печать
valid -> 123-456-7890
invalid -> 123456789
invalid -> 1234-55-888
valid -> 1234567898
invalid -> 112-
invalid -> 123456689001