[HOWTO] Парсинг телефонов (регулярное выражение)

  • Автор темы Автор темы Bran
  • Дата начала Дата начала

Bran

A-Parser Enterprise License
A-Parser Enterprise
Гуру regex, прошу вашей помощи.

Нужно спарсить номера с микс источников. Номера всегда начинается с +435/05 + 8 цифр
Формат:
+435XXXXXXXX - международный
05XXXXXXXX - местный

План минимум для основных форматов:
Код:
+43511111111
+43 511111111
+43 511 111111
0511111111
0511 111111
Пробовал по аналогии делать, например это
Код:
/^\s*(?:\+?(\d{1,3}))?([-. (]*(\d{3})[-. )]*)?((\d{3})[-. ]*(\d{2,4})(?:[-.x ]*(\d+))?)\s*$/gm
почти подходит, но собирает много мусора и ненужные префиксы.



Возможно ли составить регулярку которая бы просто брала +435/05 и 8 цифр (в идеале с отсеиванием пробелов и прочих символов)?
Был бы очень благодарен...


План максимум:
+43511111111
+4351111 1111
+43511 11 11 11
+43 511111111
+43 51111 1111
+43 511 111111
+43 511 111 111
+43 511 11 11 11
+43511 111111
+43511 111 111
+43511 11 11 11
+43(0)511111111
+43(0)51111 1111
+43(0)511 111 111
+43(0)511 11 11 11
+43(0) 511 111111
+43(0) 511 111 111
+43(0) 511 11 11 11

0511111111
0511 111111
0511 111 111
0511 11 11 11
0 511111111
0 51111 1111
0 511 111111
0 511 111 111
0 511 11 11 11
 
Возможно ли составить регулярку которая бы просто брала +435/05 и 8 цифр (в идеале с отсеиванием пробелов и прочих символов)?
Был бы очень благодарен...

одной регуляркой тут не обойтись, необходимо 3 действия:
  1. собрать похожие на номер последовательности
  2. почистить на мусор
  3. проверить более строгой регуляркой
Используем для сбора номеров:
Код:
(?:^|[^\d])((?:\+43|0)[\d ()]+)

Для удаления лишних символов:
Код:
[^\d+]+

И для строгой проверки:
Код:
^((?:\+430?5|05)\d{8})$

e30w4.png


we2uu.png
 
Fofbidden, от души) Один из лучших продуктов на отечественном рынке. А поддержка так вообще выше всяких похвал:rolleyes:
 
Прошу помочь разобраться. Подправил шаблон под себя..

eyJwcmVzZXQiOiIoXHUwNDE4XHUwNDNkXHUwNDQyXHUwNDM1XHUwNDQwXHUwNDNk
XHUwNDM1XHUwNDQyX1x1MDQzY1x1MDQzMFx1MDQzM1x1MDQzMFx1MDQzN1x1MDQz
OFx1MDQzZFx1MDQ0YilfZW1haWxfcGhvbmVfMiIsInZhbHVlIjp7InByZXNldCI6
IihcdTA0MThcdTA0M2RcdTA0NDJcdTA0MzVcdTA0NDBcdTA0M2RcdTA0MzVcdTA0
NDJfXHUwNDNjXHUwNDMwXHUwNDMzXHUwNDMwXHUwNDM3XHUwNDM4XHUwNDNkXHUw
NDRiKV9lbWFpbF9waG9uZV8yIiwicGFyc2VycyI6W1siTmV0OjpIVFRQIiwiZGVm
YXVsdCIseyJ0eXBlIjoib3ZlcnJpZGUiLCJpZCI6InVzZXByb3h5IiwidmFsdWUi
OmZhbHNlfSx7InR5cGUiOiJjdXN0b21SZXN1bHQiLCJyZXN1bHQiOiJkYXRhIiwi
cmVnZXgiOiIoKD8+XFxiWy1hLXowLTkuXyUrXSspQFthLXowLTkuLV0rXFwuW2Et
el17Miw2fSlcXGIiLCJyZWdleFR5cGUiOiJpZyIsInJlc3VsdFR5cGUiOiJhcnJh
eSIsImFycmF5TmFtZSI6Im1haWxzIiwicmVzdWx0cyI6WyJtYWlsIl19LHsidHlw
ZSI6ImN1c3RvbVJlc3VsdCIsInJlc3VsdCI6ImRhdGEiLCJyZWdleCI6Iig/Ol58
W15cXGRdfDApKCg/OlxcKzN8WzEtOV18XFwoKVtcXGR8XFwtfFxcICgpXSspIiwi
cmVnZXhUeXBlIjoiZyIsInJlc3VsdFR5cGUiOiJhcnJheSIsImFycmF5TmFtZSI6
InBob25lcyIsInJlc3VsdHMiOlsicGhvbmUiXX0seyJ0eXBlIjoib3ZlcnJpZGUi
LCJpZCI6ImZvcm1hdHJlc3VsdCIsInZhbHVlIjoiWyVcblx0Rk9SRUFDSCBpID0g
WzAuLmRhdGFzLm1heF07XG4gICAgXHRxdWVyeS5vcmlnIF8gXCI7XCIgXyBcbiAg
ICBcdG1haWxzLiRpLm1haWwgXyBcIjtcIiBfIFxuICAgICAgICBnb29kcGhvbmVz
MS4kaS5waG9uZTEgXyBcIlxcblwiIElGIHBob25lMSAhPSAnbm9uZSc7XG5cdEVO
RDtcbiVdIn1dXSwicmVzdWx0c0Zvcm1hdCI6IiRwMS5wcmVzZXQiLCJyZXN1bHRz
U2F2ZVRvIjoiZmlsZSIsInJlc3VsdHNGaWxlTmFtZSI6IiRkYXRlZmlsZS5mb3Jt
YXQoKS50eHQiLCJhZGRpdGlvbmFsRm9ybWF0cyI6W10sInJlc3VsdHNVbmlxdWUi
OiJubyIsInF1ZXJ5Rm9ybWF0IjpbIiRxdWVyeSJdLCJ1bmlxdWVRdWVyaWVzIjpm
YWxzZSwic2F2ZUZhaWxlZFF1ZXJpZXMiOmZhbHNlLCJpdGVyYXRvck9wdGlvbnMi
Onsib25BbGxMZXZlbHMiOmZhbHNlLCJxdWVyeUJ1aWxkZXJzQWZ0ZXJJdGVyYXRv
ciI6ZmFsc2UsInF1ZXJ5QnVpbGRlcnNPbkFsbExldmVscyI6ZmFsc2V9LCJyZXN1
bHRzT3B0aW9ucyI6eyJvdmVyd3JpdGUiOmZhbHNlfSwiZG9Mb2ciOiJubyIsImtl
ZXBVbmlxdWUiOiJObyIsIm1vcmVPcHRpb25zIjpmYWxzZSwicmVzdWx0c1ByZXBl
bmQiOiIiLCJyZXN1bHRzQXBwZW5kIjoiIiwicXVlcnlCdWlsZGVycyI6W10sInJl
c3VsdHNCdWlsZGVycyI6W3sic291cmNlIjpbMCxbIm1haWxzIiwibWFpbCJdXSwi
dHlwZSI6ImxjIiwiYXJyYXkiOiJtYWlscyIsInRvIjoibWFpbCJ9LHsic291cmNl
IjpbMCxbInBob25lcyIsInBob25lIl1dLCJ0eXBlIjoicmVnZXhSZXBsYWNlIiwi
YXJyYXkiOiJwaG9uZXMxIiwicmVnZXgiOiJbXlxcZCtdKyIsInJlZ2V4VHlwZSI6
ImciLCJyZXBsYWNlIjoiIiwidG8iOiJwaG9uZTEifSx7InNvdXJjZSI6WzAsWyJw
aG9uZXMxIiwicGhvbmUxIl1dLCJ0eXBlIjoic3RyaW5nUmVwbGFjZSIsImFycmF5
IjoicGhvbmVzMSIsInNlYXJjaCI6IikiLCJyZXBsYWNlIjoiIiwidG8iOiJwaG9u
ZTEifSx7InNvdXJjZSI6WzAsWyJwaG9uZXMxIiwicGhvbmUxIl1dLCJ0eXBlIjoi
c3RyaW5nUmVwbGFjZSIsImFycmF5IjoicGhvbmVzMSIsInNlYXJjaCI6IigiLCJy
ZXBsYWNlIjoiIiwidG8iOiJwaG9uZTEifSx7InNvdXJjZSI6WzAsWyJwaG9uZXMx
IiwicGhvbmUxIl1dLCJ0eXBlIjoicmVnZXgiLCJhcnJheSI6Imdvb2RwaG9uZXMx
IiwicmVnZXgiOiJeKCg/OlxcKzM4PzV8MFswLTldKVxcZHs4fSkkIiwicmVnZXhU
eXBlIjoiZyIsInRvIjpbInBob25lMSJdfV0sImNvbmZpZ092ZXJyaWRlcyI6W119
fQ==

Пытаюсь получить данные
URL;e-mail;Телефон
С первыми двумя проблем не возникло, а вот телефон в массиве вывода не могу получить.
Данные в массиве:
d356d138c17f.png


Если шаблон вывода имеет код

[%
FOREACH i = [0..datas.max];
query.orig _ ";" _
mails.$i.mail _ ";" _
goodphones1.$i.phone1 _ "\n" IF phone1 != 'none';
END;
%]

Тогда получаю:

c5569480fc91.png


Сайт на котором тестировался пресет: _uzauto-gm.com.ua.
А так же как объединить данные в массиве ( в случае если телефонов окажется несколько на странице)
Спасибо!
 
Здравствуйте.
Попробуйте так.
Код:
[%
FOREACH i = [0..datas.max];
   str = query.orig _ ";" _ mails.$i.mail _ ";" ;
    FOREACH item IN goodphones1;
           IF item.phone1 != 'none';
                  str = str _ item.phone1 _ ";";
            END;
     END;
  str _ "\n";
END;
%]
 
Назад
Верх