Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/165: Рейтинг темы: голосов - 165, средняя оценка - 4.87
38 / 38 / 30
Регистрация: 07.04.2014
Сообщений: 219

Регулярка для поиска номера телефона

02.03.2015, 17:37. Показов 32885. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет !
Сделал такую регулярку:
C#
1
const string myReg1 = @"((\+38|8)[ ]?)?([(]?\d{3}[)]?[\- ]?)?[\d\-]{6,14}";
Она не ловит все варианты разумеется.
Меня больше всего интересует, как переделать, чтобы ловило такой вариант 063 123 45 67
Если получится этот вариант усовершенствовать еще лучше, буду весьма благодарен.
Миниатюры
Регулярка для поиска номера телефона  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.03.2015, 17:37
Ответы с готовыми решениями:

Регулярка для поиска IPEndPoint
пытаюсь такую написать, почему то у него нет метода Parse :( почему вот это не срабатывает? @"{4}\:(\d+)" на вход подается...

Регулярка для поиска пути к корню диска
Добрый день. Мне понадобилось решить простую задачу: определить, ведет ли путь, указанный в строке к корню диска. Казалось бы все просто,...

Тип данных для номера телефона
Здравствуйте. Возник такой вопрос. На форме есть текстбатон, для номера телефона, через него заполняються данные в бд. Так вот, какой тип...

8
 Аватар для ture
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,049
02.03.2015, 19:31
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
using System.Text.RegularExpressions;
 
 
 
class cyb23 {
    public static void Main() {
        string strIn=@"89154246837,9154246837, +79154246837, 8 915 4246837, 8(915)424-68-37, 8915 424 68-37, 8915 424 68 37, 8-9-1-5-4-2-4-6-8-3-7, 9-1-5-4-2-4-6-8-3-7";
        string strPattern=@"(\+7|8|\b)[\(\s-]*(\d)[\s-]*(\d)[\s-]*(\d)[)\s-]*(\d)[\s-]*(\d)[\s-]*(\d)[\s-]*(\d)[\s-]*(\d)[\s-]*(\d)[\s-]*(\d)";
        MatchCollection mm=Regex.Matches(strIn, strPattern);
        foreach (Match m in mm) {
            Console.WriteLine("{0} ==> {1}",m.Value,Regex.Replace(m.Value,"^"+strPattern+"$","+7($2$3$4)$5$6$7-$8$9-$10$11"));
        }
 
        Console.ReadLine();
    }
}
У меня вот такое пашет. Попадания хорошие, но узик видит, что не приняла прога и править может.
0
307 / 284 / 102
Регистрация: 06.05.2014
Сообщений: 861
02.03.2015, 19:52
Spiderman5, это дичайший пример входной строки (хорошо бы получить её)! Неужели данные действительно подаются в таком виде? Если это так, то никакой регуляркой нельзя гарантировать правильность выбранного шаблона - это по большому счёту просто набор символов.
А выбирать и мобильные (12 знаков в международном формате) и стационарные (внутри географической зоны от 5 до 7 знаков как правило) - это вообще неправильно.
Даже в твоём варианте паттерн может вытащить телефон с 19'ю(!) цифрами (ex. 3806311122233344455), что не есть верно. Или же наоборот выбрать номер с недостающим числом знаков (ex. 380631), что тоже не лучший вариант.
Можно более развёрнутое тз?

Добавлено через 6 минут
ture, в каждой стране свои правила набора в международном формате. В России - это:
+7(код оператора/города)(код абонента)
в Украине же это:
+38(код оператора/города)(номер абонента)
При этом и правила набора в/вне страны также отличается.
Это я к тому, что регулярку было бы хорошо подогнать под данные тз, но они ужасны и не могут подпадать под один шаблон.

Добавлено через 2 минуты
В общем-то у меня тоже имеется паттерн, но под него так же могут попадать не валидные данные:
C#
1
\+? ?3?[ -]?8?[ -]?\(?(\d[ -]?){3}\)?[ -]?(\d[ -]?){7}
0
38 / 38 / 30
Регистрация: 07.04.2014
Сообщений: 219
02.03.2015, 20:53  [ТС]
BozKurt, Задание просто учебное, нужно написать как можно более общий шаблон для номера телефона, считывать с файла весь текст и записать в другой файл номера.
Я доволен своим вариантом, но мне хочется, чтобы он ловил такой вариант: 063 123 45 67
Не знаю, как переделать в своём примере.
0
307 / 284 / 102
Регистрация: 06.05.2014
Сообщений: 861
03.03.2015, 12:02
Spiderman5, это не совсем верное использование регулярных выражений. Вытаскивать одновременно мобильные и стационарные номера одним паттерном не верно, у них разный шаблон по определению (см. Wiki).
Если же просто "хочется", то вот это у себя: [\d\-]{6,14}, замени на вот это: (\d[ -]?){6,14}. Почему именно так - думаю разберёшься.

Добавлено через 6 минут
Было бы гораздо продуктивнее, если бы формат номера был одинаковый, но номера были разных стран (здесь даже можно попробовать искать одновременно и мобильные и стационарные).
Вот здесь: Телефонный план нумерации описаны шаблоны телефонных номеров и формат у них одинаковый:
<код страны> <код региона/оператора> <номер абонента>
Вот здесь уже вполне уместны и логичны регулярные выражения.
1
38 / 38 / 30
Регистрация: 07.04.2014
Сообщений: 219
03.03.2015, 18:11  [ТС]
BozKurt, благодарю ! После внесения изменения словило все нужные мне номера
0
38 / 38 / 30
Регистрация: 07.04.2014
Сообщений: 219
03.03.2015, 18:19  [ТС]
Добавил еще кое-какие изменения, может кому-то тоже пригодится:
C#
1
const string myReg1 = @"((\+38|8|\+3|\+ )[ ]?)?([(]?\d{3}[)]?[\- ]?)?(\d[ -]?){6,14}";
Вот, как ловится в примере.
Миниатюры
Регулярка для поиска номера телефона  
1
307 / 284 / 102
Регистрация: 06.05.2014
Сообщений: 861
03.03.2015, 19:37
Spiderman5, печаль в том, что будет ловиться и такое:"1 2-34 5 6 7 8-9-1-1-234-", но на телефонный номер это не очень то и похоже.
0
38 / 38 / 30
Регистрация: 07.04.2014
Сообщений: 219
03.03.2015, 20:07  [ТС]
BozKurt, сложно найти золотую середину
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2015, 20:07
Помогаю со студенческими работами здесь

Регулярные выражения для номера телефона с кодом
Всем привет В общем, нужно ввести номер телефона с кодом и при выводе этого номера на экран выделить этот код цветом Вот мой код, но...

Неверное регулярное выражение для номера телефона
using System; using System.Text.RegularExpressions; namespace Dictionary { /// &lt;summary&gt; /// Компания. ///...

C# регулярное выражение для формирования номера телефона
Всем привет! Что-то никак не могу составить регулярное выражение, для удаления лишних символов из строки, которая являеться номером...

Как задать маску для номера мобильного телефона?
Здравствуйте! Скажите, как можно задать маску для номера мобильного телефона в модели или в представлении? Чтоб было в текстбоксе +7( )...

Набор номера телефона для осуществления разговора через гарнитуру компьютера
Господа, доброго времени суток! Столкнулся с задачей написания программы, основной функцией которой является набор номера телефона для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru