Имя: Пароль:
IT
 
Преобразование строки в массив
0 drcrasher
 
31.05.16
10:54
Господа, имею вопрос.
Дано:
строка телефонов, которая приходит с сайта в виде
- "8-999-111-22-33 вася"
- "7 999 111 2233 вася 8-999-222-3-444 петя звонить после 11"
и им подобные.
Требуется:
разложить всю эту канитель в нормальный вид:
-79991112233 + комментарий в КИ Вася
-79992223444 + комментарий в КИ Петя звонить после 11

Есть мысли, как такое можно реализовать программно? Вариант "менеджер коллцентра должен править" рассматривается, но хочется автоматизации.
1 Nuobu
 
31.05.16
10:55
(0) Телефон до первой буквы?
2 drcrasher
 
31.05.16
10:57
(1) а если будет что-то типа "вася 8999 000 11 11"?
Вообще, я даже и представить не могу, какая каша в КИ на самом деле может встречаться.
3 DDwe
 
31.05.16
10:59
(2) Видимо регулярки тебе в помощь.
4 Mikeware
 
31.05.16
10:59
регулярные выражения....
5 Mikeware
 
31.05.16
11:00
(3) баян же ж, не правда ли? :-)
6 DDwe
 
31.05.16
11:03
(5) )))
7 drcrasher
 
31.05.16
11:04
(3)(4) хорошая мысль
8 DDwe
 
31.05.16
11:05
(7) Она не просто хорошая, она может оказаться единственно верной в твоей ситуации. ))
9 Рэйв
 
31.05.16
11:09
(0)Бардак систематизировать нельзя. Сначала придется причесать к какому то одному виду. Хотябы первое- это что телефон идет всегда первым. Или наоборот. Иначе это нереально
10 drcrasher
 
31.05.16
11:15
(8) осталось придумать, каким образом всё это выковыривать
(9) в этом и проблема.
11 1Сергей
 
31.05.16
11:16
(10) если не так много элементов. то проще посадить обезьянку, которая распишет всё по полям
12 DDwe
 
31.05.16
11:17
(10) Пишешь релулярку, подсовываешь свою строку, потом втрорую, третью... и так пока фантазия не иссякнет. Не работает? Правишь регулярку, работает - вуаля.
13 DDwe
 
31.05.16
11:20
Телефоны ты вытащишь, а вот как ты это разбирать будешь ""7 999 111 2233 вася 8-999-222-3-444 петя звонить после 11" ", что к кому относится, я не знаю.
14 DDwe
 
31.05.16
11:21
(13)+ С другой стороны, напишешь маленькую, самообучающуюся нейронную сеть и проблемы нет. )))
15 Mikeware
 
31.05.16
11:23
(13) все, что до  очередного телефона - относится к предыдущему.
16 DDwe
 
31.05.16
11:25
(15) Ну, это мы так можем решить, а тот кто пишет эту ахинею, может думать по другому.
17 drcrasher
 
31.05.16
11:26
(11) обезьянки сопротивляются (пока).
(14) ну это самое простое %)
(16) ту не представляешь, насколько прав. иногда там встречаются паспортные данные и адреса
18 VladZ
 
31.05.16
11:29
(0)  А можно сделать так, чтобы с сайта информация приходила в виде :

<телефон>; <контактное лицо>; <информация>   ???
19 drcrasher
 
31.05.16
11:33
(18) проблема в том, что эту инфу забивает покупатель. Заставить его вносить корректно - не реально
20 DDwe
 
31.05.16
11:35
(19) Опаньки....

А он у тебя куда забивает?
21 Mikeware
 
31.05.16
11:36
(19) почему "не реально"?
регулярки точно так же могут проверять телефон и на сайте
22 Mikeware
 
31.05.16
11:36
(20) в косяк?
23 DDwe
 
31.05.16
11:37
(19) + Ты дай ему поля, что бы не было выбора и свободы и все.
24 drcrasher
 
31.05.16
11:37
(20) чего "опаньки"? В (0) же сразу написал об этом %)
в обычный инпут

(22) похоже
(21) иногда этот набор букв забивают и в оффлайн магазине.
25 drcrasher
 
31.05.16
11:38
(23) мы ушли от вопроса разбора бардака к правильному подходу, но до подхода пока, к сожалению, далеко
26 DDwe
 
31.05.16
11:39
(25) Так почему нельзя разделить всё по полям ввода?
27 drcrasher
 
31.05.16
11:40
(26) насколько я понимаю, на сайте такая структура базы и страниц, что распилить не получится. но не уверен.
28 drcrasher
 
31.05.16
15:33
а подскажите, что же ему тут не нравится?

Функция СодержитТолькоЦифры(Стр)
    // считаем, что телефон может содержать цифры,
    // + , - ()
    Валидатор = "/^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$/";
    РегЭксп.Pattern = Валидатор;
    РегЭксп.IgnoreCase = Истина;
    РегЭксп.Global = Истина;
    Рез = РегЭксп.Execute(Стр);
    ЧислоВх = Рез.Count(); ----- 0???
    Возврат Истина;
КонецФункции

РегЭксп = Новый COMОбъект("VBScript.RegExp"); // Новый("RegExp");
Стр = "8-999-111-22-33";
29 Timon1405
 
31.05.16
15:57
(28) 1. слеши по бокам лишние
Валидатор = "^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$";
     2. если нужна только проверка можно использовать функцию
РегЭксп.Test(Стр);
30 drcrasher
 
31.05.16
16:11
(29) ага, спасибо
31 drcrasher
 
31.05.16
18:49
Ну что. Победила обработка =)
Если кому нужно - могу выложить.
32 DDwe
 
31.05.16
19:16
(31) Давай, любопытно.
33 Гобсек
 
01.06.16
04:39
(31)выложи в книгу знаний
34 VladZ
 
01.06.16
05:16
(27) В наше время можно в космос полететь. Не поверю, что нельзя сделать нужную тебе структуру на сайте.