1С 8.3 Проверка строки на валидность (по скобкам)
Данные > Примеры кода 1С > 1С 8.3 Строка, текст, буквы
Перейти в раздел примеры кода 1С 8.3:
CopyPaste с телеграм-канала
Вариант 1: Проверка строки на валибность "()","{}", "[]" в 1С 8.3:
&НаСервере
Функция ПроверитьСтрокуНаВалидностьПоСкобкам1(ПроверяемаяСтрока)
// Проверим, вдруг строка пустая
Если ПустаяСтрока(ПроверяемаяСтрока) Тогда
Возврат Истина;
КонецЕсли;
// Зададим массив, куда будем добавлять скобки последовательно
Скобки = Новый Массив;
// Обойдем все
Для ТекСимвол = 1 По СтрДлина(ПроверяемаяСтрока) Цикл
// Получим текущий элемент, сохранив в переменную
ТекЭлемент = Сред(ПроверяемаяСтрока,ТекСимвол,1);
Если ТекЭлемент = "(" Тогда
// Добавлять будем последний элемент, чтобы сравнивать сразу с ним
Скобки.Добавить(")");
ИначеЕсли ТекЭлемент = "[" Тогда
Скобки.Добавить("]");
ИначеЕсли ТекЭлемент = "{" Тогда
Скобки.Добавить("}");
ИначеЕсли Скобки.Количество() = 0 Тогда
// Проверив, что текущий элемент у нас не открывающаяся скобка, и стек скобок пустой, возвращаем значение Ложь
Возврат Ложь;
Иначе
// Получаем индекс последней скобки
ПоследнийИндекс = Скобки.Количество() - 1;
Если Скобки[ПоследнийИндекс] = ТекЭлемент Тогда
// Если последний элемент равен нашей закрывающийся скобки, то мы удаляем этот элемент из стека скобок,
// так как пара скобок у нас сошлась и закрылась
Скобки.Удалить(ПоследнийИндекс);
Иначе
Возврат Ложь;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Проверим, остались ли незакрытые скобки в стеке
Если Скобки.Количество() <> 0 Тогда
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
Функция ПроверитьСтрокуНаВалидностьПоСкобкам1(ПроверяемаяСтрока)
// Проверим, вдруг строка пустая
Если ПустаяСтрока(ПроверяемаяСтрока) Тогда
Возврат Истина;
КонецЕсли;
// Зададим массив, куда будем добавлять скобки последовательно
Скобки = Новый Массив;
// Обойдем все
Для ТекСимвол = 1 По СтрДлина(ПроверяемаяСтрока) Цикл
// Получим текущий элемент, сохранив в переменную
ТекЭлемент = Сред(ПроверяемаяСтрока,ТекСимвол,1);
Если ТекЭлемент = "(" Тогда
// Добавлять будем последний элемент, чтобы сравнивать сразу с ним
Скобки.Добавить(")");
ИначеЕсли ТекЭлемент = "[" Тогда
Скобки.Добавить("]");
ИначеЕсли ТекЭлемент = "{" Тогда
Скобки.Добавить("}");
ИначеЕсли Скобки.Количество() = 0 Тогда
// Проверив, что текущий элемент у нас не открывающаяся скобка, и стек скобок пустой, возвращаем значение Ложь
Возврат Ложь;
Иначе
// Получаем индекс последней скобки
ПоследнийИндекс = Скобки.Количество() - 1;
Если Скобки[ПоследнийИндекс] = ТекЭлемент Тогда
// Если последний элемент равен нашей закрывающийся скобки, то мы удаляем этот элемент из стека скобок,
// так как пара скобок у нас сошлась и закрылась
Скобки.Удалить(ПоследнийИндекс);
Иначе
Возврат Ложь;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Проверим, остались ли незакрытые скобки в стеке
Если Скобки.Количество() <> 0 Тогда
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
Вариант 2: Проверка строки на валибность "()","{}", "[]" в 1С 8.3:
Функция ПроверитьСкобкиВСтроке(Строка)
Скобки = Новый Соответствие;
Для Каждого ТекСимвол Из СтрРазделить("[,],(,),{,}", ",", Ложь) Цикл
Скобки.Вставить(ТекСимвол, 0);
КонецЦикла;
// Обойдем все
Для ТекСимвол = 1 По СтрДлина(Строка) Цикл
ТекСимвол = Сред(Строка, ТекСимвол, 1);
КолТекСимв = Скобки.Получить(ТекСимвол);
Если КолТекСимв <> Неопределено Тогда
Скобки.Вставить(ТекСимвол, КолТекСимв + 1);
КонецЕсли;
КонецЦикла;
Возврат (Скобки.Получить("[") = Скобки.Получить("]")) И
(Скобки.Получить("(") = Скобки.Получить(")")) И
(Скобки.Получить("{") = Скобки.Получить("}"));
КонецФункции
Скобки = Новый Соответствие;
Для Каждого ТекСимвол Из СтрРазделить("[,],(,),{,}", ",", Ложь) Цикл
Скобки.Вставить(ТекСимвол, 0);
КонецЦикла;
// Обойдем все
Для ТекСимвол = 1 По СтрДлина(Строка) Цикл
ТекСимвол = Сред(Строка, ТекСимвол, 1);
КолТекСимв = Скобки.Получить(ТекСимвол);
Если КолТекСимв <> Неопределено Тогда
Скобки.Вставить(ТекСимвол, КолТекСимв + 1);
КонецЕсли;
КонецЦикла;
Возврат (Скобки.Получить("[") = Скобки.Получить("]")) И
(Скобки.Получить("(") = Скобки.Получить(")")) И
(Скобки.Получить("{") = Скобки.Получить("}"));
КонецФункции
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник