Как преобразовать номер телефона?

1. user1041556 29.08.20 13:34 Сейчас в теме
В строку поиска по контрагентам менеджеры хотят вводить номер телефона в свободном формате
Например: 8(900)123-45-67 или +7900 12345-67
Как программно преобразовать в формат: 9001234567 ? (именно так содержатся номера телефонов в базе).
По теме из базы знаний
Найденные решения
10. user856012 14 29.08.20 23:02 Сейчас в теме
(8)
на этот случай там есть комментарий )
Поиск по сайту есть на любой случай: https://forum.infostart.ru/forum9/topic114710/
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. BackinSoda 29.08.20 13:42 Сейчас в теме
(1) сделать СокрЛП исходной строки, пройтись циклом по каждому символу - если не число то исключить, дальше можно искать "900" и от него всё вправо взять
3. user1041556 29.08.20 13:44 Сейчас в теме
(2) Подскажите как?
Сейчас у меня к строке поиска есть кнопка, ее код:
Процедура НайтиНажатие(Элемент)
	
	Если СписокПоляПоиска = "Наименование" Тогда
		СправочникСписок.Отбор[СписокПоляПоиска].ВидСравнения 	= ВидСравнения.Содержит;
		СправочникСписок.Отбор[СписокПоляПоиска].Значение 		= СтрокаПоиска;
		СправочникСписок.Отбор[СписокПоляПоиска].Использование 	= Истина;
	Иначе
		ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Ложь;
		
		Если СтрДлина(СтрокаПоиска) = 10 Тогда 
			СправочникСписок.Отбор[СписокПоляПоиска].ВидСравнения 	= ВидСравнения.Равно;
			СправочникСписок.Отбор[СписокПоляПоиска].Значение 		= Число(СтрокаПоиска);
			СправочникСписок.Отбор[СписокПоляПоиска].Использование 	= Истина;
					Иначе
			
			Предупреждение(СтрокаПоиска);
        	Предупреждение("Введите все 10ть цифр номера!");
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры
Показать
4. BackinSoda 29.08.20 13:54 Сейчас в теме
(3) а где происходит поиск, в форме списка контрагентов ? "СтрокаПоиска" это реквизит формы ?
5. user1041556 29.08.20 14:00 Сейчас в теме
(4) Да в форме списка контрагентов, где контрагенты это справочник.
СтрокаПоиска это поле ввода, размещенное на панели, тип значения строка. Т.е. не реквизит.
6. BackinSoda 29.08.20 16:29 Сейчас в теме
(5)
// можно дополнить другими спецсимволами
ЗаменяемыеСимволы = "+<>()[]";

Результат = СтрокаПоиска;
Для Позиция = 1 По СтрДлина(Символы) Цикл
	Результат = СтрЗаменить(Результат, Сред(ЗаменяемыеСимволы, Позиция, 1), " ");
КонецЦикла;

Результат = СокрЛп(Результат);

// подойдёт только если код города всегда "900"
НомерСимвола = Найти(Результат, "900"); 
Если НомерСимвола <> 0 Тогда
	Результат = Сред(Результат, НомерСимвола);
Иначе
	Если Стрдлина(Результат) = 7 Тогда 
		//считаем что нормальный номер, только без кода
		Результат = "900" + Результат;
	Иначе
		Сообщить("Введен не правильный формат номера"); 
	КонецЕсли;
КонецЕсли;
Показать

Что-то такое.. Вставляете код в начале процедуры нажатия, и заменяете "СтрокаПоиска" на "Результат" в местах где
СправочникСписок.Отбор[СписокПоляПоиска].Значение = Результат;
7. UtSpar 137 29.08.20 16:46 Сейчас в теме
(6)В этом случае введут любой другой символ отличный от +<>()[] и будет проблема.
8. BackinSoda 29.08.20 17:02 Сейчас в теме
(7) на этот случай там есть комментарий )
9. UtSpar 137 29.08.20 17:19 Сейчас в теме
10. user856012 14 29.08.20 23:02 Сейчас в теме
(8)
на этот случай там есть комментарий )
Поиск по сайту есть на любой случай: https://forum.infostart.ru/forum9/topic114710/
11. BackinSoda 29.08.20 23:14 Сейчас в теме
(10) Не всем понятны "регулярные выражения" описанные в этой теме. И там нет конкретно того, что хотел автор.
12. user856012 14 29.08.20 23:33 Сейчас в теме
(11)
И там нет конкретно того, что хотел автор.
По-моему, вам надо поменять очки - в этих вы плохо видите, они слишком темные. ;-)

Конкретно почитайте там комментарий № 3 - разве не этого хотел автор? На всякий случай напоминаю:
(1)
Как программно преобразовать в формат: 9001234567 ?

Ах да, надо ведь добавить:
   Возврат Прав(ВыхСтрока,10);

Архисложная задача! ;-P
13. BackinSoda 30.08.20 00:01 Сейчас в теме
(12) Для автора видимо сложная, раз спрашивает (это можно понять с первых ответов), да и я не претендую на единственное верное решение.
зы: в коде коммента номер 3 нет ни про сокрлп, ни прав(..., 10).
14. user856012 14 30.08.20 00:05 Сейчас в теме
(13)
в коде коммента номер 3 нет ни про сокрлп
А зачем там СокрЛП?
ни прав(..., 10)
Это да, что делает задачу этой ветки практически нерешаемой... для вас - точно, для автора - может быть... ;-)
17. Vitaly1C8 31.08.20 09:20 Сейчас в теме
(1)
Рез = СтрЗаменить(Рез, "+", "");
Рез = СтрЗаменить(Рез, "-", "");
Рез = СтрЗаменить(Рез, "(", "");
Рез = СтрЗаменить(Рез, ")", "");
Рез = СтрЗаменить(Рез, " ", "");
15. user1041556 30.08.20 00:17 Сейчас в теме
Набросал такой код, работает но странно, например
номер 8(900) 161 50 01 некорректно обрабатывает, теряет ноль и получается 900161501, в тоже время
8(900) 977 850 11 00 корректирует нормально в 9009778501100
Почему из двух нулей остается один 0 не понятно
16. user856012 14 30.08.20 00:56 Сейчас в теме
(15)
Набросал такой код
Какой именно "такой" - мы, наверное, должны угадать? Извините, но телепатия после полуночи почему-то "некорректно обрабатывает". :-)
18. user1041556 31.08.20 13:18 Сейчас в теме
(16) )) Ха, забыл видимо сам код опубликовать)
Но в любом случае воспользовался примером по ссылке выше.
19. lmnlmn 69 31.08.20 23:14 Сейчас в теме
Сложно живете))
ДлинаСтроки = СтрДлина(ТелефонСБотвой);
Телефон = "";
Для Сч = 1 По ДлинаСтроки Цикл
	Символ = Сред(ТелефонСБотвой, Сч, 1);
	Если Символ >= "0" и Символ <= "9" Тогда
		Телефон = Телефон + Символ;
	КонецЕсли
КонецЦикла
Показать
20. asae 15.08.23 18:36 Сейчас в теме
подсмотрено в 1С и чуток допилено:

ЛишниеСимволы = СтрСоединить(СтрРазделить(ТелефонМобильныйПредставление, "0123456789"), "");

СтрокаТелефон = СтрСоединить(СтрРазделить(ТелефонМобильныйПредставление, ЛишниеСимволы), "");

СтрокаТелефон = Прав(СтрокаТелефон, СтрДлина(СтрокаТелефон) - 1);

СтрНовый.ТелефонМобильныйПредставление = "+7" + СтрокаТелефон;
Показать
21. comptr 35 16.08.23 06:45 Сейчас в теме
(20)
СтрокаТелефон = Прав(СтрокаТелефон, СтрДлина(СтрокаТелефон) - 1);

Если телефон введут в "свободном формате", например, без +7 или без 8, то в итоге из него пропадёт первая цифра.
Думаю, "СтрДлина(СтрокаТелефон) - 1" можно смело заменить на "10".
Оставьте свое сообщение

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