powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / REGEXP русский телефонный номер
10 сообщений из 10, страница 1 из 1
REGEXP русский телефонный номер
    #38579583
Фотография Alexei772
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте,

вот вариант регулярного выражения для телефонного номера в виде +7 (495) 111-11-11:
^\+\d{1,2}\s+?\(\d{3,5}\)\s+?\d{1,3}-\d{2}-\d{2}$

но телефонные номера бывают разных видов

например, бывают такие варианты комбинаций
(ххх)ххх-хх-хх
(ххх)ххх-хххх
(хххх)хх-хххх
(хххх)хххххх
(ххх)ххххххх
ххх-хх-хх
ххх-хххх
+хх(ххх)ххх-хх-хх
+хх(ххх)ххх-хххх
+хх(ххх)ххххххх

помогите составить одно регулярное выражение для такого вида телефонов
...
Рейтинг: 0 / 0
REGEXP русский телефонный номер
    #38579590
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexei772, можно огласить исходную задачу?
От задачи зависит и способ решения. В ряде случаев достаточно выкинуть все не цифры и проверить количество оставшихся символов, так как с точки зрения чистой телефонии все эти скобки и дефисы не имеют вообще никакого значения. А иногда требуется строгое соблюдение правил - тогда номер нужно тщательно анализировать, включая коды страны и сети.
...
Рейтинг: 0 / 0
REGEXP русский телефонный номер
    #38579614
Фотография Alexei772
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle,

я загружаю страницу и делаю поиск по странице с целью найти телефонные номера...
...
Рейтинг: 0 / 0
REGEXP русский телефонный номер
    #38579626
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexei772,

В первом приближении довольно просто. Убрать всё кроме цифр и пробелов (точки, запятые, плюсы и еще кое-что тоже оставить придется). Далее найти слова длиной 6 и более символов.

Однако, в Ваши схемы (как и в мой вариант решения) не вписывается вид вроде "+7 987 654 1122" или "+7 (987) 654 1122"
...
Рейтинг: 0 / 0
REGEXP русский телефонный номер
    #38579631
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Второе приближение - убрать все символы, кроме алфавитно-цифровых. Искать последовательности цифр длиной 5,6,7,10 и 11.
Дополнительно при длине 11 можно проверить первый символ найденного фрагмента на 7 и 8.
При длине 10 и 11 можно проверить подстроку начиная с 1 и 2 символа, соответственно, на наличие в таблице междугородних кодов российских городов, а также специальных кодов (например, 800) и кодов операторов связи без географической привязки.
...
Рейтинг: 0 / 0
REGEXP русский телефонный номер
    #38580154
Фотография Alexei772
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хех. так вот то что вы говорите я хорошо понимаю... :) а вот в практике написать не могу можете помочь?..
...
Рейтинг: 0 / 0
REGEXP русский телефонный номер
    #38580191
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexei772,

Задача не тривиальна, как на первый взгляд кажется. В том смысле, что одной регуляркой весьма проблемно охватить весь спектр вариантов написания номеров телефонов. Не, напихать все варианты шаблонов не представляет проблем, будет работать от этого медленнее, да и только. А в том смысле, что данные для парсинга сперва подготовить желательно, убрать все, что гарантировано не имеет отношения к искомому (слова, состоящие целиком из букв, например). В оставшемся уже разбирать, является (или может ли являться) это номером телефона или нет.
...
Рейтинг: 0 / 0
REGEXP русский телефонный номер
    #38580290
b10s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, Вам нужно бы определится с типом рег-экспа. Эт я занудничаю)

Вот сервис http://regex101.com для тестов

думаю, посидев часок - составите нужный :)
...
Рейтинг: 0 / 0
REGEXP русский телефонный номер
    #38580318
b10s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
b10s,

ну, и я бы рекомендовал использовать не одно универсальное и громоздкое выражение, а несколько. разбить на классы аля с кодом и без код, со скобочками и без и т.д. и выбирать. иначе получится такая каша, что мама не горюй
...
Рейтинг: 0 / 0
REGEXP русский телефонный номер
    #38580488
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexei772,


а зачем нам-то думать о возможных формах написания телефонов?

придумывай шаблоны для этих форм сам ( как ты собсно и начал делать), а генератор РВ ниже:

( извиняюсь, но написал не на php, а на приличном языке ;)

Код: perl
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
use strict;
use utf8;

my %рег_шаблоны = ();

my $тел_шаблоны = <<EOF;
(xxx)xxx-xx-xx
(xxx)xxx-xxxx
(xxx)xx-xxxx
(xxxx)xxxxxx
(xxx)xxxxxx
xxx-xx-xx
xxx-xxxx
+xx(xxx)xxx-xx-xx
+xx(xxx)xxx-xxxx
+xx(xxx)xxxxxxx
8_926_435-66-88
+x_(xxx)_xxxxxxx
EOF

# в вышеприведенных шаблонах нужно использовать _ в качестве пробела и либо Х в качестве цифры, либо просто любую цифру

# а ниже сам генератор, который кладёт в ассоц. массив %рег_шаблоны сгенерированные и уже откомпилированные по шаблону Рег.Выражения
for my $строчка ( < $тел_шаблоны > ) {
    my $ключ = $строчка;
    $строчка =  quotemeta($строчка);
    $строчка =~ s{[0-9 x]} {\\d}gxi;
    $строчка =~ s{[  _  ]} {\\s}gxi;
    $рег_шаблоны{ $ключ } = qr/($строчка)/ms;
}


my $Юрий_Олеша__Зависть = <<EOF;
Он поет по утрам в клозете. Можете представить себе, какой 
это жизнерадостный, здоровый человек. Желание петь возникает в 
нем рефлекторно. Эти песни его, в которых нет ни мелодии, ни 
слов, а есть только одно "та-ра-ра", выкрикиваемое им на разные 
лады, можно толковать так: 

"Как мне приятно жить... та-ра! та-ра!.. Мой кишечник 
упруг... ра-та-та-та-ра-ри... Правильно движутся во мне 
соки... ра-та-та-ду-та-та... Сокращайся, кишка, сокращайся... 
трам-ба-ба-бум!" 
8 910 437-66-99

Когда утром он из спальни проходит мимо меня (я притворяюсь 
спящим) в дверь, ведущую в недра квартиры, в уборную, мое 
воображение уносится за ним. Я слышу сутолоку в кабинке 
уборной, где узко его крупному телу. Его спина трется по 
внутренней стороне захлопнувшейся двери, и локти тыкаются в 
стенки, он перебирает ногами. В дверь уборной вделано матовое 
овальное стекло. Он поворачивает выключатель, овал освещается 
изнутри и становится прекрасным, цвета опала, яйцом. Мысленным 
взором я вижу это яйцо, висящее в темноте коридора. В нем весу 
шесть пудов. Недавно, сходя где-то по лестнице, он заметил, 
как в такт шагам у него трясутся груди. Поэтому он решил  
прибавить новую серию гимнастических упражнений. Это +7(495)187-11-55
образцовая мужская особь.
EOF

# последовательно применяем к тексту все шаблоны из набора ( а найденные телефоны будут оседать в переменной $1 )
my $ключ;
for $ключ ( keys %рег_шаблоны ) {

    write while( $Юрий_Олеша__Зависть =~ /$рег_шаблоны{$ключ}/g );  
}

# для удобства вывел в от-format-ированную таблицу

format STDOUT_TOP =

сработавший шаблон !сгенерированное для шаблона РВ         !найденный телефон
-----------------------------------------------------------------------------

.

format STDOUT =       
@<<<<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<@>>>>>>>>>>>>>>>>
$ключ,             $рег_шаблоны{$ключ},                    $1
.



На выходе получилось вот что:
Код: html
1.
2.
3.
4.
5.
6.
7.
сработавший шаблон !сгенерированное для шаблона РВ         !найденный телефон
-----------------------------------------------------------------------------

xxx-xx-xx          (?^ms:(\d\d\d\-\d\d\-\d\d))                     437-66-99
xxx-xx-xx          (?^ms:(\d\d\d\-\d\d\-\d\d))                     187-11-55
(xxx)xxx-xx-xx     (?^ms:(\(\d\d\d\)\d\d\d\-\d\d\-\d\d))      (495)187-11-55
8_926_435-66-88    (?^ms:(\d\s\d\d\d\s\d\d\d\-\d\d\-\d\d))   8 910 437-66-99



видно, что телефон +7(495)187-11-55 полностью не нашёлся
по причине отсутствия шаблона
+x(xxx)xxx-xx-xx,
поэтому последний нужно просто добавить в список шаблонов.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / REGEXP русский телефонный номер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]