Как исправить регулярное выражение для поиска номера телефона?
Воспользуйтесь библиотекой libphonenumber, она адаптирована под многие языки программирования

C#: https://github.com/twcclegg/libphonenumber-csharp
Go: https://github.com/nyaruka/phonenumbers
Objective-c: https://github.com/iziz/libPhoneNumber-iOS
PHP: https://github.com/giggsey/libphonenumber-for-php
PostgreSQL in-database types: https://github.com/blm768/pg-libphonenumber
Python: https://github.com/daviddrysdale/python-phonenumbers
Ruby: https://github.com/mobi/telephone_number
Rust: https://github.com/1aim/rust-phonenumber
Erlang: https://github.com/marinakr/libphonenumber_erlang
Clojure: https://github.com/randomseed-io/phone-number
R: https://github.com/socialresearchcentre/dialr/
в регесп можно делать тоже условия и добавлять и или и не но не и тд. 
вот тебе самый простой способ, по факту несколько масок в одной регулярке.
https://regex101.com/r/DnsKfE/1
но сдается мне нужно вам выделить не просто эти телефоны но и привести их к  подобию
Праильно ли я понимаю
+7 или +3 или 8 ( есть ли еще другие ) ?
убираем сразу пробел ? 
убираем сразу скобки ?
Если не с +7|8|+3|3 то телфон не верный ? или он не верный если цифр будет на 1 меньше, огда просо отсекаем +? 
В общем составьте схемку всей логики я вам напишу регулярку.  сразу чтоб в $0 выдавался унифицированный формат.
Опять же какие коды городов допустимы ? 
ну или худобы стран
Хотя конечно если вкрлючать прям все доступные кгды  это будет муторно, 
А вот если вы знаете что это точно телеон и в этом элементе массива именно она то можно  уже валидировать по длинне  и пара варианто начала, всю мелочь типа пробелов тире отрезать и посчитать колчество от этого и валидировать.