Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

RegEXP на номера телефонов

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> RegEXP на номера телефонов
Имя
Сообщение << Старые топики   Новые топики >>
RegEXP на номера телефонов - 2009-12-14 19:06:12.176666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Прошу помочь составить регэксп на номера телефонов в международном формате, например +123(45)6789012, +123-45-6789-01-2, +123456789012, +123 45 678-90-12 и т.п. Аналогично делает skype toolbar для IE и FF.
Нагуглил это: http://regexlib.com/Search.aspx?k=&c=7&m=-1&ps=20 , но ничего дельного там не нашёл. Начал с такого: \+\d{1,3}\x28\d{2}\x29\d{7} Для проверки использую Это
Post #: 1
RE: RegEXP на номера телефонов - 2009-12-14 19:11:06.133333   
Smelo

Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
один рег - нерационально
удали все НЕчисла, дальше делай что нужно
Post #: 2
RE: RegEXP на номера телефонов - 2009-12-14 19:26:03.050000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Мне на странице надо разметку всунуть вокруг номеров. Удалять - долго и не нужно. Тут или один тяжёлый регэксп или много мелких.
Post #: 3
RE: RegEXP на номера телефонов - 2009-12-14 20:05:36.650000   
Smelo

Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
ну если нужно проверить номер или нет false/true
то как то так
#\+[\d\-\)\(\s]{12,14}#

универсальный рег тут составить невозможно
если только дашь чёткую маску всех возможных вариантов
quote:

Удалять - долго

выбрал всё по предидущей реге
поудалял/проверил
вставил в рамку что надо
Post #: 4
RE: RegEXP на номера телефонов - 2009-12-14 20:35:10.856666   
Smelo

Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
затесть
#\+\d(?:(?<=[\d\-\s\(\)])\d|[\-\s\)\(](?=\d)){11,16}(?=(?:\s|$))#

{11,16} - минимальная/максимальная длина со всеми знаками без первого числа(того что после плюса)
Post #: 5
RE: RegEXP на номера телефонов - 2009-12-14 22:42:56.486666   
tеstеr

Сообщений: 377
Оценки: -46
Присоединился: 2008-02-08 17:56:40.563333
1. Сначала идёт + (он должен быть всегда) - [+].
2. Далее идёт 3 цифры, они должны быть всегда - [0-9]{3}.
3. Далее идёт 2 цифры, окружённые разделителями класса 1 - ([(][0-9]{2}[)])|([-][0-9]{2}[-])|([ ][0-9]{2}[ ])|([0-9]{2})
Разделители класса 1 = пара проделов, пара скобок, пара минусов, отсутвие разделителей.
4. Далее идёт 7 цифр между которыми может быть 6 разделителей класса 2 - ([ -]?[0-9]){7}
Разделитель класса 2 = пробел, тире, отсутствие разделителя.


И того получаем регулярно выражение:
[+] [0-9]{3}([(][0-9]{2}[)])|([-][0-9]{2}[-])|([ ][0-9]{2}[ ])|([0-9]{2})([ -]?[0-9]){7}

У него есть недостаток.
Оно пропустит такие номера как
+123-45–1234567
+123(45)-1234567
+123 45 1234567

Но в целом оно сработает.
Post #: 6
RE: RegEXP на номера телефонов - 2009-12-15 12:02:21.126666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
http://rsdn.ru/forum/dynamic/3638031.1.aspx

В общем мы подумали и решили, что будет массив регэкспов. Мы пару штук забьём, а если кастомеру будет нужно - он пришлёт нам шаблоны и мы остальное довинтим. Спасибо участникам обсуждения.
Post #: 7
RE: RegEXP на номера телефонов - 2009-12-15 12:18:06.563333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333

quote:

ORIGINAL: Smelo

затесть
#\+\d(?:(?&lt;=[\d\-\s\(\)])\d|[\-\s\)\(](?=\d)){11,16}(?=(?:\s|$))#

{11,16} - минимальная/максимальная длина со всеми знаками без первого числа(того что после плюса)


Не компилит :)…
Post #: 8
RE: RegEXP на номера телефонов - 2009-12-15 12:39:53.890000   
Smelo

Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
это POSIX
в пхп работает

print preg_match("#\+\d(?:(?&lt;=[\d\-\s\(\)])\d|[\-\s\)\(](?=\d)){11,16}(?=(?:\s|$))#","dfgdfg dfgd fg +123-45-6789-01-2 fsdfsdfsdf dgdf gdf gdfg ")
Post #: 9
RE: RegEXP на номера телефонов - 2009-12-15 12:54:19.240000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Всё равно допиливать надо =). Код может быть от 1 до 3 цифр, а не ровно 3.

п.с. причём тут posix?
Post #: 10
RE: RegEXP на номера телефонов - 2009-12-15 13:47:23.696666   
Smelo

Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
quote:

Всё равно допиливать надо =).

приведи все возможные варианты номеров
quote:

Код может быть от 1 до 3 цифр, а не ровно 3.

эта не учитывает код
она смотрит перед каждой цифрой - либо другую цифру либо тире либо пробел либо скобки
и ограничивает набор по длине
quote:

п.с. причём тут posix?

всмысле pcre =) ошибся
Post #: 11
RE: RegEXP на номера телефонов - 2009-12-15 19:12:57.820000   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
http://www.linux.org.ru/view-message.jsp?msgid=3556034

почитай здесь комментарии
Post #: 12
RE: RegEXP на номера телефонов - 2009-12-15 19:37:29.486666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Да мы сами к этому пришли.
Пока - просто перебор массивом регэкспов (для нескольких шаблонов). Попозже - свой парсер.
Post #: 13
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> RegEXP на номера телефонов







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.