SeiOkami / OneS

Предложения по улучшению платформы
49 stars 3 forks source link

Хочется в функции СтрЗаменить() опцию "Игнорировать регистр" #216

Open tormozit opened 1 year ago

tormozit commented 1 year ago

https://partners.v8.1c.ru/forum/t/2132299/m/2132299 Для строковых функций поиска проблема учета регистра букв не стоит остро, т.к. перед их вызовом можно привести обе строки к нижнему регистру: • Найти • СтрНайти • СтрНачинаетсяС Но для модифицирующих функций • СтрЗаменить • СтрНайтиИВыделитьОформлением Проблема учета регистра букв стоит остро, т.к. на выходе нужен текст, в котором изменены будут только заданные фрагменты. В остальной части регистр букв должен быть сохранен.

В 8.3.23 после многих лет ожиданий мы получили функцию СтрЗаменитьПоРегулярномуВыражению, которая формально поглощает СтрЗаменить() и позволяет управлять игнорированием регистра букв. Но чтобы через нее написать полный аналог СтрЗаменить() как минимум нужно выполнить экранирование всех спецсимволов в искомой строке, что делает такое решение неудобным и небыстрым.

Поэтому я все же желаю, чтобы в простой и быстрой функции СтрЗаменить() появился параметр для игнорирования регистра букв.

tormozit commented 2 weeks ago
// Преобразует строку для использования в регулярных выражениях путем экранирования управляющих символов.
// Параметры:
//  Текст        - Строка.
// Возвращаемое значение:
//  Строка - для вставки в регулярные выражения.
Функция ТекстДляРегВыраженияЛкс(Знач Текст) Экспорт
    СтрокаСлужебныхСимволов = "\[]^$()?*+.|{}"; // "\" должен быть первым
    Для Счетчик = 1 По СтрДлина(СтрокаСлужебныхСимволов) Цикл
        СпецСимвол = Сред(СтрокаСлужебныхСимволов, Счетчик, 1);
        Текст = СтрЗаменить(Текст, СпецСимвол, "\" + СпецСимвол);
    КонецЦикла;
    Возврат Текст;
КонецФункции