Как удалить из строки все символы кроме букв и цифр

Иногда возникает необходимость удалить из переменной с типом Строка все специальные символы и оставить только буквы, цифры, тире, подчеркивание и т.п. Например, это нужно при формировании имени файла.

Способов существует много. Некоторые предлагают работать с кодом символов. Известно, что коды букв и цифр находятся в определенном интервале. Таким образом, можно получать код каждого символа, сравнивать его с допустимыми интервалами и в случае необходимости удалять символ.

Я же предлагаю более простой, на мой взгляд, способ. Он заключается в последовательном переборе символов строки и допустимых символов. Для строк с небольшой длиной (а имена файлов редко бывают очень длинными) этот код работает достаточно быстро.

Функция ПолучитьПолноеИмяФайла(знач Контрагент)

//Создаем переменную, в которую поместим все допустимые символы
ДопустимыеСимволы = " абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
ДлинаДС = СтрДлина(ДопустимыеСимволы);
Символ = СтрДлина(Контрагент);

//В переменной Контрагент находится строка, из которой нужно убрать недопустимые символы
//Обойдем каждый символ этой строки, начиная с конца
Пока Символ>0 Цикл
Найдено = Ложь;

//Проверим, есть ли этот символ в перечне допустимых.
//Здесь вместо цикла можно было бы использовать еще функцию Найти()
Для ДопустимыйСимвол = 1 По ДлинаДС Цикл
Если Сред(Контрагент,Символ, 1)=Сред(ДопустимыеСимволы, ДопустимыйСимвол, 1) Тогда
Найдено = Истина;
Прервать;
КонецЕсли;
КонецЦикла;

//Если символ не найден, удаляем его.
Если Не Найдено ТОгда
Контрагент = СтрЗаменить(Контрагент, Сред(Контрагент,Символ, 1), "");
КонецЕсли;
Символ = Символ-1;
КонецЦикла;

Возврат Контрагент;

КонецФункции

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

11 + 14 =