Удалить символы из строки

1. JaroslavBayev 05.08.14 10:29 Сейчас в теме
Платформа 1С 8.2 для контакт центра дабы исключить написания телефонов абонентов "как Бог на душу послал", была введена маска: +999(99)-9-999-999, однако к сожалению не учел, что человек разрабатывавший документ - "Заявка" указал тип поля "Телефон" - Строка и в результате при передачи номера на АТС для исходящего звонка система его так и передает: +999(99)-9-999-999, естественно звонка не происходит, возможно, ли передавать эту строку в виде 999999999999?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
18. Luchik 673 01.09.16 13:13 Сейчас в теме
(1) JaroslavBayev, если на Windows, то можно так:
    RegExp = Новый COMОбъект("VBScript.RegExp");
    RegExp.IgnoreCase = Истина; //Игнорировать регистр 
    RegExp.Global = Истина; //Поиск всех вхождений шаблона 
    RegExp.MultiLine = Истина; //Многострочный режим 
        
    RegExp.Pattern = "[^0-9]"; // отбор только чисел
    ТелефонИсправленный = RegExp.Replace(Телефон, "")
Показать
ivangrant; Henistaromin; dreamcreal; rayastar; Светлый ум; json; natarezn; +7 2 Ответить
19. ditp 91 01.09.16 13:18 Сейчас в теме
(18) Luchik, а еще лучше это код наваять на жаваскрипте и воткнуть в поле хтмл документа.
В другой базе, которую опубликовать на виртуалке, понятой на домашнем компьютере.
И обращаться туда с помощью веб-сервиса.
А вызов веб-сервиса сделать не средствами 1С, а спомощью ком-объектов.
И наваять это все на жаваскрипте...
user1628996; marchel; user1906988; EvilMilko; user1829907; korppinen; BuriyLesha; temdj; al_kopylov; klinval; BomjBandit; NN2P; kniga888; user756416; sasha777666; andreich_ru; j.r.r; astrallight; stupidgamer; iCortezik; allGood's; Drivingblind; mirco; Enyel; RodinMax; Dmitri93; dreamcreal; user644003_; admin; ekomova; Team leader; Serve-it; MaxiMkaUA; Anchoret; Cooler; +35 2 Ответить
20. Luchik 673 01.09.16 13:59 Сейчас в теме
(19) ditp, наверное, смешно. К сожалению, не увидел Вашего предложения по решению проблемы
21. ditp 91 01.09.16 14:09 Сейчас в теме
(20) Luchik, решение в (3) вполне удобоворимо. В рамках поставленной задачи не вижу смысла что-то другое предлагать.

А ваше предложение действительно напомнило промелькнувшее не так давно на форуме: "не смог запустить ком-объект в 1С 77, поэтому подключился по ком к 1С 83 и вызвал функцию оттуда".
22. Luchik 673 01.09.16 15:21 Сейчас в теме
(21) ditp, согласен - если нужно преобразовать только один раз, то, конечно решение (3) оптимально.
А если, необходимо преобразовать большое количество записей, то метод, предложенный мной работает быстрее (если, сначала, создать COMОбъект и инициализировать его свойства, а затем, в цикле использовать
ТелефонИсправленный = RegExp.Replace(Телефон, "")
)
natarezn; +1 Ответить
38. fzt 29.04.20 04:40 Сейчас в теме
(19) сарказм не уместен, в силу того что это решение работает на всей линейке ОС Windows.
25. bmk74 234 01.09.16 18:08 Сейчас в теме
(18) Luchik, а чем плох этот паттерн
RegExp.Pattern = "[^/d]"
, слэш правда уже не помню в какую сторону должен быть, но смысл в том что он только числа отобрать должен
28. Luchik 673 02.09.16 09:33 Сейчас в теме
(25) bmk74, Да, можно и так:
RegExp.Pattern = "[^\d*]";

Звездочка, в принципе, не нужна
2. botcman 05.08.14 10:36 Сейчас в теме
СтрЗаменить(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>)
ПодстрокаПоиска = "-"
ПодстрокаЗамены = ""

еще раз

ПодстрокаПоиска = "("
ПодстрокаЗамены = ""

и еще раз

ПодстрокаПоиска = ")"
ПодстрокаЗамены = ""

Ну и первый символ отсечь Сред(<Строка>, 2)
Xomka; temdj; user1089020; San40s; gradi; +5 Ответить
3. Cooler 22 05.08.14 11:19 Сейчас в теме
(2) Еще пробелы надо убирать, наверняка ведь для сотовых в номере окажется "( )".

И вообще, я бы применил более надежное решение, а то мало ли как потом надумают шаблон поменять:

Функция ТолькоЦифры(ВхСтрока)
   ВыхСтрока="";
   Для п=1 По СтрДлина(ВхСтрока) Цикл
      Симв=Сред(ВхСтрока,п,1);
      Если Симв>="0" И Симв<="9" Тогда
         ВыхСтрока=ВыхСтрока+Симв;
      КонецЕсли;
   КонецЦикла;
   Возврат ВыхСтрока;
КонецФункции
Показать
seppe_sai; gybson; user640247; bohdan-k; Lapitskiy; Nikitos_NSK; Dizel; criptid; djl; user1302055; sasha777666; andreich_ru; v_moskalyk; Krio2; eeeio; yusupoff; Alex.O; ekomova; AntonSm; Anchoret; JaroslavBayev; Shurik1C; +22 Ответить
8. gradi 5 05.08.14 23:04 Сейчас в теме
(3) Cooler, ваш вариант, в данном случае, избыточный - т.к. маска ввода отсекает не числовые символы.
9. Cooler 22 05.08.14 23:55 Сейчас в теме
(8)
маска ввода отсекает не числовые символы.
Об этом я и сам написал в (6).

Но при этом в сохраняемом номере обязательно присутствуют символы "+()-" - в этом и заключается проблема автора, читайте ветку немного внимательнее.
10. natarezn 01.09.16 12:36 Сейчас в теме
(3) Cooler, убрать пробелы : СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими(" ", символыстроки, ""))
12. Cooler 22 01.09.16 12:50 Сейчас в теме
(10) natarezn,
Cooler, убрать пробелы
Ваше сообщение даже спустя 2 года чрезвычайно актуально и интересно! Особенно с учетом, что "убирать пробелы" уже тогда требовалось в неизвестной конфигурации и вообще это нужно было не мне.

(11) natarezn,
можно попробовать убить все не числа
Потрудитесь прочитать (3) полностью - там даже какой-то код есть. Surprise!

P.S. Вам опять понадобились стартмани?
14. natarezn 01.09.16 13:01 Сейчас в теме
(12) Cooler, я вижу человека с рейтингом 1
user1706724; +1 Ответить
16. Cooler 22 01.09.16 13:04 Сейчас в теме
(14) natarezn, а я вижу флудера. Что хуже?
fzt; v_moskalyk; heroinepta; +3 Ответить
24. Cooler 22 01.09.16 18:02 Сейчас в теме
было ОПЛАТАЗАТОВАРЫ.НАЗНАЧЕНИЯПОСЧЕТСУММА496-00ВТ.Ч.НДС(18%):75-66 с номером счета
стало 1031908201649600187566
Шедеврально!!!

Luchik, оказывается, ваш способ преобразует "ОПЛАТАЗАТОВАРЫ.НАЗНАЧЕНИЯПОСЧЕТСУММА" в "10319082016".

Не, мой код из (3) такого явно не умеет, поздравляю!
27. Luchik 673 02.09.16 09:11 Сейчас в теме
(24) Cooler, советую перед тем, как писать - проверять. Вот скрин результата
32. Cooler 22 02.09.16 12:18 Сейчас в теме
(27) Luchik,
советую перед тем, как писать - проверять.
Спасибо за совет, вообще-то это был сарказм. Но, судя по вашей реакции на (19), вы его не различаете, так что я вам советовать ничего не буду.

Да и адресован мой сарказм был не вам, а высоко оценившей ваш способ natarezn, как ответ на ее мелкую женскую месть.

(26)
Чушь - возвращает 49600187566
Разумеется, это очевидно, что приведенный ею результат не может быть получен ни вашим, ни моим кодом. Правда, я как раз догадался, откуда такой результат мог вылезти, подсказка тут:
с номером счета

Вангую: она пыталась "удалить символы" из какого-то представления документа "Счет № 103 от 19.08.2016", посмотрите сами по цифрам.

Ну, а то, как она сумела это изложить, лишь подтвердило поговорку о сравнении женщин-программистов с морскими свинками.
33. Luchik 673 02.09.16 12:30 Сейчас в теме
(32) Cooler, для более предметного общения, предлагаю вспомнить правила форума
Запрещено:
Публиковать заведомо ложнyю инфоpмацию.
Использовать мат и/или грубые выражения (в том числе в замаскированной форме).
Оскорблять кого-либо в прямой или косвенной форме, высказывать неуважение и/или хамить участникам форума.
Правила форума
vlasin; yusupoff; natarezn; +3 Ответить
34. Cooler 22 02.09.16 12:35 Сейчас в теме
(33) Luchik, ваша цитата затрагивает (14)? Если нет, то почему? Если да, то что же вы раньше молчали?

Впрочем, правила так правила:
Самовольное модерирование. Т.е. когда некий участник форума, не являющийся модератором данного форума, делает замечания другим участникам.
Ы?
35. natarezn 02.09.16 14:56 Сейчас в теме
(27) Luchik, у меня уже все готово ! код работает ! спасибо!
37. resonance 81 19.04.20 22:26 Сейчас в теме
(3)
ВыхСтрока="";
Для п=1 По СтрДлина(ВхСтрока) Цикл
Симв=Сред(ВхСтрока,п,1);
Если Симв>="0" И Симв<="9" Тогда
ВыхСтрока=ВыхСтрока+Симв;
КонецЕсли;
КонецЦикла;
Возврат ВыхСтрока;


Спасибо. Взял на вооружение.
44. user640247 17.10.23 13:05 Сейчас в теме
(3)
Функция ТолькоЦифры(ВхСтрока)
ВыхСтрока="";
Для п=1 По СтрДлина(ВхСтрока) Цикл
Симв=Сред(ВхСтрока,п,1);
Если Симв>="0" И Симв<="9" Тогда
ВыхСтрока=ВыхСтрока+Симв;
КонецЕсли;
КонецЦикла;
Возврат ВыхСтрока;
КонецФункции


очень пригодилось, спасибо
45. starik-2005 3039 17.10.23 15:42 Сейчас в теме
(44)
очень пригодилось
Функ ОнлиЦифири(Строк)
  ВсеНеЦифры = "()- "; // для начала начал
  Ретурн СтрСоединить(СтрРазделить(Строк, ВсеНеЦифры, Ложь))
ЭндОфФунк
user640247; +1 Ответить
4. JaroslavBayev 05.08.14 12:32 Сейчас в теме
Большое спасибо вам обоим, возьму на вооружение вариант Cooler т.к действительно мало ли, что еще по шаблону придумают.
5. МимохожийОднако 141 05.08.14 12:58 Сейчас в теме
При записи номера неплохо добавить проверку на наличие только цифр в реквизите Телефон. И делать отказ от записи, пока не будет правильно..
6. Cooler 22 05.08.14 22:50 Сейчас в теме
(5)
При записи номера неплохо добавить проверку на наличие только цифр в реквизите Телефон.
Как раз это достигается заданием соответствующей маски ввода.
7. SemenovaMarinaV 05.08.14 22:56 Сейчас в теме
11. natarezn 01.09.16 12:43 Сейчас в теме
&НаСервере
Функция ОпределениеЧисла(Цифра)
СТРОЧКА="0123456789" ;
если цифра = "" тогда возврат 0 конецесли;
Если СтрНайти(Строчка,Цифра)>0 Тогда
возврат СтрНайти(Строчка,Цифра)
Иначе
возврат 0
КонецЕсли;
КонецФункции
можно попробовать убить все не числа
13. natarezn 01.09.16 13:00 Сейчас в теме
а можно через функцию ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Строка,Разделитель)
15. natarezn 01.09.16 13:02 Сейчас в теме
Удалить символы из строки - что-то я не увидела запретов на работу с программированием !
17. natarezn 01.09.16 13:09 Сейчас в теме
ну, кто-нибудь понял как удалить в цикле символы из строки универсально ? очень нужно
23. natarezn 01.09.16 17:40 Сейчас в теме
спасибо Вам большое , Luchik!
было ОПЛАТАЗАТОВАРЫ.НАЗНАЧЕНИЯПОСЧЕТСУММА496-00ВТ.Ч.НДС(18%):75-66 с номером счета
стало 1031908201649600187566
26. Luchik 673 02.09.16 09:04 Сейчас в теме
(23) natarezn, Чушь - возвращает 49600187566
ellina.tatarintseva; +1 Ответить
29. assa 61 02.09.16 11:06 Сейчас в теме
Недавно нужно было удалить символы из строки. Нашел такое решение
Функция УбратьВсёКроме(пстрДанные,пстрДопустимые)
	
	лчДл	= СтрДлина(пстрДанные);
	лстр	= "";
	Для лч = 1 По лчДл Цикл
		лстрСимв	= Сред(пстрДанные, лч, 1);
		
		Если Найти(пстрДопустимые,лстрСимв) > 0 Тогда 
			
			лстр	= лстр + лстрСимв;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат лстр;
	
КонецФункции
Показать

Работает на ура.
30. v3rter 02.09.16 11:11 Сейчас в теме
(29) assa, и на пустой строке не падает?
31. assa 61 02.09.16 12:08 Сейчас в теме
v3rter, Как то не пришло в голову передать пустую строку. Вы проверили? Или так, для поднятия темы? С чего падать?
лчДл    = СтрДлина(пстрДанные);

    Для лч = 1 По лчДл Цикл
36. v3rter 12.04.19 16:29 Сейчас в теме
(31) Нет, не для поднятия. два года назад понадобилась такая функция и сейчас снова - эта тема в десятке гугла по вопросу "1с убрать символы из строки оставить только цифры". В моём случае было важно обрабатывать пустую строку, поэтому добавил в Вашу функцию
    Если ТипЗнч(пстрДанные) <> Тип("Строка") Тогда
        Возврат "";
    КонецЕсли;
    
    Если НЕ ЗначениеЗаполнено(пстрДанные) Тогда
        Возврат "";
    КонецЕсли;
39. YA_204387496 21.07.21 10:41 Сейчас в теме
Функция из типовой 1С:
Функция ФорматироватьНомер(Номер)
	Результат = "";
	ДопустимыеСимволы = "1234567890";
	Для Позиция = 1 По СтрДлина(Номер) Цикл
		Символ = Сред(Номер,Позиция,1);
		Если СтрНайти(ДопустимыеСимволы, Символ) > 0 Тогда
			Результат = Результат + Символ;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Результат;
КонецФункции
Показать
40. Sashares 34 21.07.21 11:43 Сейчас в теме
(39)Результат = СтрСоединить(СтрРаздлить(Номер,СтрСоединить(СтрРазделить(Номер,"1234567890",Ложь)),Ложь));
DoctorRoot; buzzzard; +2 Ответить
41. UPKA 27.04.22 13:28 Сейчас в теме
Ребят, подскажите, как привести такой формат 8-900-123-45-67 к 79001234567? Т.е. поменять первую цифру на "7" и убрать символы "-".
42. Sashares 34 27.04.22 14:39 Сейчас в теме
(41)Ответ в сообщении выше. Дальше смотри первый символ - если 8 заменяй на 7.
43. user679935_artem.ant 05.09.22 14:28 Сейчас в теме
УправлениеКонтактнойИнформациейКлиентСервер.ОставитьТолькоЦифрыВСтроке(Телефон)
rolin555; svezr; Demlan; janit; Westbound; +5 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот