O conselho de sua equipe é quase correto, exceto pelo erro que foi cometido. Depois de descobrir o porquê, você nunca mais esquecerá. Dê uma olhada neste erro.
/^(7|8|9)\d{9}$/
O que isso faz:
^e $denota correspondências ancoradas, que afirmam que o subpadrão entre essas âncoras é a correspondência inteira. A string só corresponderá se o subpadrão corresponder à totalidade, não apenas a uma seção.
()denota um grupo de captura .
7|8|9indica a correspondência de qualquer um dos 7, 8ou 9. Ele faz isso com alternâncias , que é o que o operador de tubo |faz - alternando entre alternâncias. Isso retrocede entre as alternâncias: Se a primeira alternância não for correspondida, o motor deve retornar antes que a localização do ponteiro se mova durante a correspondência da alternância, para continuar correspondendo à próxima alternância; Considerando que a classe de personagem pode avançar sequencialmente. Veja esta correspondência em um mecanismo regex com otimizações desativadas:
Pattern: (r|f)at
Match string: carat

Pattern: [rf]at
Match string: carat

\d{9}corresponde a nove dígitos. \dé um metacaractere abreviado, que corresponde a qualquer dígito.
/^[7|8|9][\d]{9}$/
Veja o que ele faz:
^e $denota correspondências ancoradas também.
[7|8|9]é uma classe de personagem . Quaisquer caracteres a partir da lista 7, |, 8, |, ou 9podem ser combinados, assim o |foi adicionado na forma incorreta. Isso corresponde sem retrocesso.
[\d]é uma classe de personagem que habita o metacaractere \d. A combinação do uso de uma classe de caractere e um único metacaractere é uma má ideia, a propósito, já que a camada de abstração pode retardar a correspondência, mas este é apenas um detalhe de implementação e se aplica apenas a algumas implementações de regex. JavaScript não é um deles, mas torna o subpadrão um pouco mais longo.
{9} indica que a única construção anterior é repetida nove vezes no total.
O regex ideal é /^[789]\d{9}$/, porque /^(7|8|9)\d{9}$/captura desnecessariamente, o que impõe uma diminuição de desempenho na maioria das implementações de regex (javascriptacontece de ser um, considerando que a questão usa palavra-chave varno código, provavelmente é JavaScript). O uso dephpque roda em PCRE para correspondência preg irá otimizar a falta de retrocesso, no entanto, não estamos em PHP também, então usar classes em []vez de alternações |dá bônus de desempenho, pois a correspondência não retrocede e, portanto, coincide e falha mais rápido do que usar seu expressão regular anterior.
(7|8|9)e[789]não são equivalentes, porque o primeiro captura, o último não.(?:7|8|9)seria equivalente, por outro lado (acho que você sabe disso, é claro ...).