Имя: Пароль:
1C
 
Функция для приведения номера или выделения номера телефона из текста к +7xxxyyyzzqq
0 ИС-2
 
naïve
14.07.21
09:33
Номер телефона в базе может быть в любом виде - и со скобками и с пробелами и с "-". Могут написать какую-то свою информацию. Например, Вася 8912 123-4560

Есть ли универсальная функция, чтобы выделить номер из текста ?
1 vicof
 
14.07.21
09:34
регулярные выражения наше всё
2 Йохохо
 
14.07.21
09:38
как добавить +7 к последним 10 цифрам, скандалы интриги расследования
3 NorthWind
 
14.07.21
09:39
(2) а если кто-то напишет
+7915ххххххх Вася
:) ?
4 Closed
 
14.07.21
09:45
Или так: Вася 89l2 l23-456O
5 Garykom
 
гуру
14.07.21
09:56
(0) 1. Очистка данных
2. Приведение/разбор по типовым шаблонам
6 Garykom
 
гуру
14.07.21
10:00
В смысле находишь цифры в тексте с разделителями типа " ", "-", "(", ")" вытаскиваешь удаляя разделители
Можно просто все не цифры заменить на " ", далее несколько пробелов приводим к одном
И затем уже по шаблону пытаемся натянуть ну типа там один номер какого вида (кроме мобильных причем код страны он как бы разный есть еще городские/международные номера с кодом города разной длины)
Или там несколько номеров подряд

Короче классификация/кластеризация (группируем похожие) и затем каждую группу по одному правилу обрабатываем
Потихоньку все группы обработаны будут кодом
7 BeerHelpsMeWin
 
14.07.21
10:03
А потом в базе появляется клиент из Украины или Прибалтики...
8 Йохохо
 
14.07.21
10:04
(3) только если контерстрайкер "+7915ххххххх |/а59"
9 Sapiens_bru
 
14.07.21
10:14
По простому вот так:

НомерЧисла = СтрСоединить(СтрРазделить(Номер,СтрСоединить(СтрРазделить(Номер,"1234567890"))));

Потом проверять что получилось 10-11 цифр и расставлять нужные пробелы/скобки

Но огребешь со всякими добавочными
10 ИС-2
 
naïve
14.07.21
11:01
(8) что за контейнер стракер ? Что за технология
11 RomaH
 
naïve
14.07.21
14:37
&НаКлиенте
Процедура НомерТелефонаИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
    
    //лТекст = СтрЗаменить(Текст," ","");
    
    ОтформатированныйТекст = "";
    
    Для Ш = 1 По СтрДлина(Текст) Цикл
        
        Цифра = Сред(Текст,Ш,1);
        
        Если СтрНайти("0123456789",Цифра) Тогда
            ОтформатированныйТекст = ОтформатированныйТекст + Цифра;    
        КонецЕсли;
        
    КонецЦикла;
    
    ОтформатированныйТекст = Лев(ОтформатированныйТекст + "##########",15);
    
    ПерваяЦифра = Лев(ОтформатированныйТекст,1);
    
    Если ПерваяЦифра = "7" ИЛИ ПерваяЦифра = "8" Тогда
        ОтформатированныйТекст = Сред(ОтформатированныйТекст,2);    
    КонецЕсли;
    
    КодыОператоров = "900 901 902 903 904 905 906 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 936 937 938 939 941 950 951 952 953 954 955 956 958 960 961 962 963 964 965 966 967 968 969 970 971 977 978 980 981 982 983 984 985 986 987 988 989 991 992 993 994 995 996 997 999";
    
    КодОператора = Лев(ОтформатированныйТекст,3);
    
    Если СтрНайти(КодыОператоров,КодОператора) Тогда
        КодОператора = Лев(КодОператора + "###",3);
    Иначе
        КодОператора = "###";
    КонецЕсли;

    Группа2 = Сред(ОтформатированныйТекст,4,3);    
    
    Группа3 = Сред(ОтформатированныйТекст,7,2);
    
    Группа4 = Сред(ОтформатированныйТекст,9,2);
    
    ОтформатированныйНомерТелефона = "+7 " + КодОператора + " " + Группа2 + " " + Группа3 + " " + Группа4;
    
    НомерТелефонаПациента = КодОператора + Группа2 + Группа3 + Группа4;
    
    Если СтрНайти(ОтформатированныйНомерТелефона,"#") Тогда
        Элементы.СтраницыОтформатированныйНомерТелефона.ТекущаяСтраница = Элементы.СтраницаОтформатированныйНомерТелефонаНет;
        Элементы.СтраницыПроверкаНомера.ТекущаяСтраница = Элементы.СтраницаПроверкаНомераНеКорректный;
    Иначе
        
        Элементы.СтраницыОтформатированныйНомерТелефона.ТекущаяСтраница = Элементы.СтраницаОтформатированныйНомерТелефонаОк;
        Элементы.СтраницыПроверкаНомера.ТекущаяСтраница = Элементы.СтраницаПроверкаНомераКорректный;
        
        ПодключитьОбработчикОжидания("ОтправитьНомерНаОжиданиеПодтверждения",0.1 + 5 * КоличествоЗапросовНомера,Истина);
        
        КоличествоЗапросовНомера = КоличествоЗапросовНомера + 1;
        
    КонецЕсли;
    
    КьюАрКод = "";
    
    Объект.НомерТелефонаДляПодтверждения = "ожидаем ...";
12 RomaH
 
naïve
14.07.21
14:39
dkb.yar.ru/pazientu/test.html
13 uno-group
 
14.07.21
15:12
(0) А там точно только Вася 8912 123-4560. И нет ТД Рога и копыта 2000-89121234560
14 uno-group
 
14.07.21
15:13
ИЛИ Вася 89121234560-89091234567
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс