Recomendação:
una o celular e telefone em um só, a não ser que vc queira usar em algo mtooooo específico para diferenciar eles. A diferença dentre celular e telefone é apenas 1 dígito.
Não sou mto bom de regex e não entendi mto bem o q vc fez ali, mas recomendo expandir um pouco a variação, tipo aceitar +55 (11) 22222-3333 ou só nros 5511222223333 e outras variações misturando celular com telefone. Em alguns locais é legal ter esse 55 (código do país Brasil).
Adicionando essas coisas, vc conseguirá deixar seu projeto mais amplo pra mais variações, claro q isso se vc quiser.
Eu tenho um format() q criei pro meu trampo, e nele tem o código do país (por mais q a implementação só seja pro BR, resolvi deixar pré-preparado pra aceitar outros países), e aceita alguns tipos de variação de formatação, então teria um enum dizendo qual variação deseja usar.
ex:
+55 (11) 22222-3333
(11) 22222-3333
551122223333
1122223333
e assim vai.
Só pra ajudar vc, uso isso como referência para os telefones/celulares BR:
13 dig - 55 11 22222 3333 (cel)
12 dig - 55 11 2222 3333 (tel)
11 dig - 11 22222 3333 (cel)
10 dig - 11 2222 3333 (tel)
9 dig - 22222 3333 (cel)
8 dig - 2222 3333 (tel)
55 é o código do país (ou DDI)
11 é o código da região (ou DDD)
ai o resto é nro da pessoa
dá pra melhorar a validação limitando o DDI ser apenas 55, DDD disponíveis, e se for celular tem q começar com 9, mas isso só se realmente vc precisar, pelo menos no meu não cheguei a esse preciosismo.