Процедура является неким аналогом работы с регулярными выражениями. Но так как код открытый есть возможность расширять функционал под себя. Также если строка подходит под форматную строку - метод возвращает строку в виде списка значений - где - значение - кусок строки, а представление - та часть форматной строки, которой этот кусок соответствует.
С помощью этого возврата - имеем возможность выделить нужные нам части из строки
В прикрепленной обработке реализован пример определения принадлежности номенклатуры к определенной группе и вытаскивание данных о размерах. Обработка для тех, кому лень вытаскивать отсюда метод. При открытии обработки она сразу заполнится данными для теста.
В методе есть возможность использовать
// N - символ от 0..9,
//# - любая последовательность чисел (0..9)
//$ - любая последовательность кроме чисел (0..9)
//Ю - любая последовательность русских букв
//F - любая последовательность КРОМЕ русских букв (для поиска артикула)
//Q - любая последовательность английских букв
//* - любая последовательность символов
//~ - любой символ кроме буквы (это числа и всякие =,- и прочее)
// I - любой символ кроме числа (0..9)
// &A - любой символ после &, с учётом регистра
// ^A - любой символ после ^, без учётом регистра
//? - любой символ
//Y - любая буква английская
//Я - любая буква русская
//С - любая буква на русском или английском
//ё - русская буква в нижнем регистре
//Ё - русская буква в верхнем регистре
//z - латиница в нижнем регистре
//Z - латиница в верхнем регистре
Пример форматной строки *#I#* для того, чтобы вычленить размеры в названии
"Двери стальные 1650x3610 мм СТ с.п. BYPR3102266701 от 23.06.2023 г., ОКРБ 007-2012 25.12.10.500"
Метод вернет список значений, состоящий из
Двери стальные
1650
x
3610
мм СТ с.п. BYPR3102266701 от 23.06.2023 г., ОКРБ 007-2012 25.12.10.500
а из него выделить размеры легко и просто.
Пример самого метода ниже
Функция глСтрокаСоответствуетФорматнойСтроке(СтрПроверяемая,ФорматнаяСтрока,СпЗнСогласноФорматнойСтрокеВозвращаем = "",ПризнакУбиратьКрайниеПробелыВпроверяемойСтроке = 1,РазделительДробнойЧасти = "",РазделительТриад = "") Экспорт
//2023.03.22
Если ТипЗнч(СпЗнСогласноФорматнойСтрокеВозвращаем)<>Тип("СписокЗначений")
Тогда СпЗнСогласноФорматнойСтрокеВозвращаем = Новый СписокЗначений;
КонецЕсли;
//форматная строка,
// N - символ от 0..9,
//# - любая последовательность чисел (0..9)
//$ - любая последовательность кроме чисел (0..9)
//Ю - любая последовательность русских букв
//F - любая последовательность КРОМЕ русских букв (для поиска артикула)
//Q - любая последовательность английских букв
//* - любая последовательность символов
//~ - любой символ кроме буквы (это числа и всякие =,- и прочее)
// I - любой символ кроме числа (0..9)
// &A - любой символ после &, с учётом регистра
// ^A - любой символ после ^, без учётом регистра
//? - любой символ
//Y - любая буква английская
//Я - любая буква русская
//С - любая буква на русском или английском
//ё - русская буква в нижнем регистре
//Ё - русская буква в верхнем регистре
//z - латиница в нижнем регистре
//Z - латиница в верхнем регистре
//расширять по мере необходимости
Если (НЕ ЗначениеЗаполнено(СтрПроверяемая))
Тогда
Если (ФорматнаяСтрока = "*")ИЛИ
(НЕ ЗначениеЗаполнено(ФорматнаяСтрока))
Тогда Возврат 1;
Иначе Возврат 0;
КонецЕсли;
КонецЕсли;
СпЗнПроверяемыеКуски = Новый СписокЗначений;
Стр = "";
ТекущийКусокСтроки = "";
НомерСимвола = 0;
Пока НомерСимвола<СтрДлина(ФорматнаяСтрока)
Цикл
НомерСимвола=НомерСимвола+1;
ПризнакНоваяЧасть = 0;
Символ = Сред(ФорматнаяСтрока,НомерСимвола,1);
Если Врег(Символ) = "N"// - служебный символ
Тогда СпЗнПроверяемыеКуски.Добавить("N");
ИначеЕсли Символ = "&"
Тогда
СпЗнПроверяемыеКуски.Добавить(Сред(ФорматнаяСтрока,НомерСимвола,2));
НомерСимвола=НомерСимвола+1;
ИначеЕсли Символ = "^"
Тогда
СпЗнПроверяемыеКуски.Добавить(Сред(ФорматнаяСтрока,НомерСимвола,2));
НомерСимвола=НомерСимвола+1;
ИначеЕсли Символ = "?"
Тогда СпЗнПроверяемыеКуски.Добавить("?");
ИначеЕсли Врег(Символ) = "Y"
Тогда СпЗнПроверяемыеКуски.Добавить("Y");
ИначеЕсли Врег(Символ) = "Я"
Тогда СпЗнПроверяемыеКуски.Добавить("Я");
ИначеЕсли (Врег(Символ) = "C")ИЛИ
(Врег(Символ) = "С")
Тогда СпЗнПроверяемыеКуски.Добавить("C");
ИначеЕсли (Символ = "z")ИЛИ
(Символ = "Z")ИЛИ
(Символ = "ё")ИЛИ
(Символ = "Ё")
Тогда СпЗнПроверяемыеКуски.Добавить(Символ);
ИначеЕсли Символ = "I"
Тогда СпЗнПроверяемыеКуски.Добавить(Символ);
ИначеЕсли (Символ = "*")ИЛИ//последовательности символов
(Символ = "#")ИЛИ
(Символ = "Ю")ИЛИ
(Символ = "F")ИЛИ
(Символ = "~")ИЛИ
(Символ = "Q")ИЛИ
(Символ = "$")
Тогда
Если СпЗнПроверяемыеКуски.Количество()>0
Тогда
Если СпЗнПроверяемыеКуски.Получить(СпЗнПроверяемыеКуски.Количество()-1).Значение <> Символ
Тогда СпЗнПроверяемыеКуски.Добавить(Символ);
КонецЕсли;
Иначе СпЗнПроверяемыеКуски.Добавить(Символ);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ПризнакУбиратьКрайниеПробелыВпроверяемойСтроке = 1
Тогда СтрДляПроверки = СокрЛП(СтрПроверяемая);
Иначе СтрДляПроверки = СтрПроверяемая;
КонецЕсли;
НомерСимвола = 1;
Для НомерПроверяемогоКуска=1 По СпЗнПроверяемыеКуски.Количество()
Цикл
ПроверяемыйКусок = СпЗнПроверяемыеКуски.Получить(НомерПроверяемогоКуска-1).Значение;
Если НЕ ЗначениеЗаполнено(СтрДляПроверки)
Тогда
Если (ПроверяемыйКусок="*")
Тогда
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(СтрДляПроверки,ПроверяемыйКусок);
Возврат 1;
Иначе Возврат 0;
КонецЕсли;
КонецЕсли;
Если ПроверяемыйКусок="*"
Тогда
Если НомерПроверяемогоКуска = СпЗнПроверяемыеКуски.Количество()
Тогда
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(СтрДляПроверки,ПроверяемыйКусок);
Возврат 1;
Иначе
ФорматнаяСтрокаСледующая = "";
Для П=НомерПроверяемогоКуска+1 По СпЗнПроверяемыеКуски.Количество()
Цикл ФорматнаяСтрокаСледующая=ФорматнаяСтрокаСледующая+СпЗнПроверяемыеКуски.Получить(П-1).Значение;
КонецЦикла;
стрВернём = "";
Пока СтрДлина(СтрДляПроверки)>0
Цикл
Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,,0,РазделительДробнойЧасти,РазделительТриад) = 1
Тогда
//стрВернём = стрВернём + Лев(СтрДляПроверки,1);
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(стрВернём,ПроверяемыйКусок);
глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,СпЗнСогласноФорматнойСтрокеВозвращаем,0,РазделительДробнойЧасти,РазделительТриад);
Возврат 1;
Иначе
стрВернём = стрВернём + Лев(СтрДляПроверки,1);
СтрДляПроверки = Сред(СтрДляПроверки,2);
КонецЕсли;
КонецЦикла;
Возврат 0;
КонецЕсли;
ИначеЕсли ПроверяемыйКусок = "#"//любое число
Тогда
Если (НомерПроверяемогоКуска = СпЗнПроверяемыеКуски.Количество())И
(СпЗнПроверяемыеКуски.Количество()>1)
Тогда
Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,"#",,,РазделительДробнойЧасти,РазделительТриад) = 0//последний кусок должен быть чисто число
Тогда Возврат 0;//если в последнем куске есть хотя бы один не символ
КонецЕсли;
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(СтрДляПроверки,ПроверяемыйКусок);
Возврат 1;
Иначе
ФорматнаяСтрокаСледующая = "";
Для П=НомерПроверяемогоКуска+1 По СпЗнПроверяемыеКуски.Количество()
Цикл ФорматнаяСтрокаСледующая=ФорматнаяСтрокаСледующая+СпЗнПроверяемыеКуски.Получить(П-1).Значение;
КонецЦикла;
стрВернём = "";
Пока СтрДлина(СтрДляПроверки)>0
Цикл
Если (Лев(СтрДляПроверки,1)>="0")И
(Лев(СтрДляПроверки,1)<="9")
Тогда//относится к числу
//стрВернём=стрВернём+Лев(СтрДляПроверки,1);
//СтрДляПроверки = Сред(СтрДляПроверки,2);
ИначеЕсли (Лев(СтрДляПроверки,1) = РазделительДробнойЧасти)И
(СтрДлина(РазделительДробнойЧасти) = 1)//(ЗначениеЗаполнено(РазделительДробнойЧасти))
Тогда
Если Найти(стрВернём,РазделительДробнойЧасти)>0
Тогда Прервать;//уже имеется разделитель - такого не может быть чтобы в числе было два разделителя дробной части
Иначе //относится к числу
КонецЕсли;
ИначеЕсли (Лев(СтрДляПроверки,1) = РазделительТриад)И
(СтрДлина(РазделительТриад) = 1) //(ЗначениеЗаполнено(РазделительТриад))
Тогда
Иначе Прервать;
КонецЕсли;
стрВернём=стрВернём+Лев(СтрДляПроверки,1);
СтрДляПроверки = Сред(СтрДляПроверки,2);
КонецЦикла;
Пока СтрДлина(стрВернём)>0
Цикл
Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,,0,РазделительДробнойЧасти,РазделительТриад) = 1
Тогда
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(стрВернём,ПроверяемыйКусок);
глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,СпЗнСогласноФорматнойСтрокеВозвращаем,0,РазделительДробнойЧасти,РазделительТриад);
Возврат 1;
КонецЕсли;
СтрДляПроверки = Прав(стрВернём,1)+СтрДляПроверки;
стрВернём = Лев(стрВернём,СтрДлина(стрВернём)-1);
КонецЦикла;
Возврат 0;
КонецЕсли;
ИначеЕсли ПроверяемыйКусок = "Ю"//русские буквы - несколько
Тогда
Если (НомерПроверяемогоКуска = СпЗнПроверяемыеКуски.Количество())И
(СпЗнПроверяемыеКуски.Количество()>1)
Тогда
Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,"Ю",,,РазделительДробнойЧасти,РазделительТриад) = 0//последний кусок должен быть русскими буквами
Тогда Возврат 0;//если в последнем куске есть хотя бы один не символ
КонецЕсли;
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(СтрДляПроверки,ПроверяемыйКусок);
Возврат 1;
Иначе
ФорматнаяСтрокаСледующая = "";
Для П=НомерПроверяемогоКуска+1 По СпЗнПроверяемыеКуски.Количество()
Цикл ФорматнаяСтрокаСледующая=ФорматнаяСтрокаСледующая+СпЗнПроверяемыеКуски.Получить(П-1).Значение;
КонецЦикла;
стрВернём = "";
Пока СтрДлина(СтрДляПроверки)>0
Цикл
СимволДляПроверки = Врег(Лев(СтрДляПроверки,1));//!!переводим в верхнгий регистр
Если (СимволДляПроверки<"А")ИЛИ
(СимволДляПроверки>"Я")
Тогда Прервать;
КонецЕсли;
стрВернём=стрВернём+Лев(СтрДляПроверки,1);
СтрДляПроверки = Сред(СтрДляПроверки,2);
КонецЦикла;
Пока СтрДлина(стрВернём)>0
Цикл
Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,,0,РазделительДробнойЧасти,РазделительТриад) = 1
Тогда
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(стрВернём,ПроверяемыйКусок);
глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,СпЗнСогласноФорматнойСтрокеВозвращаем,0,РазделительДробнойЧасти,РазделительТриад);
Возврат 1;
КонецЕсли;
СтрДляПроверки = Прав(стрВернём,1)+СтрДляПроверки;
стрВернём = Лев(стрВернём,СтрДлина(стрВернём)-1);
КонецЦикла;
Возврат 0;
КонецЕсли;
ИначеЕсли ПроверяемыйКусок = "F"//любая последовательность КРОМЕ русских букв
Тогда
Если (НомерПроверяемогоКуска = СпЗнПроверяемыеКуски.Количество())И
(СпЗнПроверяемыеКуски.Количество()>1)
Тогда
Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,"Ю",,,РазделительДробнойЧасти,РазделительТриад) = 0//последний кусок должен быть русскими буквами
Тогда Возврат 0;//если в последнем куске есть хотя бы один не символ
КонецЕсли;
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(СтрДляПроверки,ПроверяемыйКусок);
Возврат 1;
Иначе
ФорматнаяСтрокаСледующая = "";
Для П=НомерПроверяемогоКуска+1 По СпЗнПроверяемыеКуски.Количество()
Цикл ФорматнаяСтрокаСледующая=ФорматнаяСтрокаСледующая+СпЗнПроверяемыеКуски.Получить(П-1).Значение;
КонецЦикла;
стрВернём = "";
Пока СтрДлина(СтрДляПроверки)>0
Цикл
СимволДляПроверки = Врег(Лев(СтрДляПроверки,1));//!!переводим в верхнгий регистр
Если (СимволДляПроверки>="А")И
(СимволДляПроверки<="Я")
Тогда Прервать;
КонецЕсли;
стрВернём=стрВернём+Лев(СтрДляПроверки,1);
СтрДляПроверки = Сред(СтрДляПроверки,2);
КонецЦикла;
Пока СтрДлина(стрВернём)>0
Цикл
Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,,0,РазделительДробнойЧасти,РазделительТриад) = 1
Тогда
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(стрВернём,ПроверяемыйКусок);
глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,СпЗнСогласноФорматнойСтрокеВозвращаем,0,РазделительДробнойЧасти,РазделительТриад);
Возврат 1;
КонецЕсли;
СтрДляПроверки = Прав(стрВернём,1)+СтрДляПроверки;
стрВернём = Лев(стрВернём,СтрДлина(стрВернём)-1);
КонецЦикла;
Возврат 0;
КонецЕсли;
ИначеЕсли ПроверяемыйКусок = "Q"//английские буквы - несколько
Тогда
Если (НомерПроверяемогоКуска = СпЗнПроверяемыеКуски.Количество())И
(СпЗнПроверяемыеКуски.Количество()>1)
Тогда
Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,"Ю",,,РазделительДробнойЧасти,РазделительТриад) = 0//последний кусок должен быть русскими буквами
Тогда Возврат 0;//если в последнем куске есть хотя бы один не символ
КонецЕсли;
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(СтрДляПроверки,ПроверяемыйКусок);
Возврат 1;
Иначе
ФорматнаяСтрокаСледующая = "";
Для П=НомерПроверяемогоКуска+1 По СпЗнПроверяемыеКуски.Количество()
Цикл ФорматнаяСтрокаСледующая=ФорматнаяСтрокаСледующая+СпЗнПроверяемыеКуски.Получить(П-1).Значение;
КонецЦикла;
стрВернём = "";
Пока СтрДлина(СтрДляПроверки)>0
Цикл
СимволДляПроверки = Врег(Лев(СтрДляПроверки,1));//!!переводим в верхнгий регистр
Если (СимволДляПроверки<"A")ИЛИ
(СимволДляПроверки>"Z")
Тогда Прервать;
КонецЕсли;
стрВернём=стрВернём+Лев(СтрДляПроверки,1);
СтрДляПроверки = Сред(СтрДляПроверки,2);
КонецЦикла;
Пока СтрДлина(стрВернём)>0
Цикл
Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,,0,РазделительДробнойЧасти,РазделительТриад) = 1
Тогда
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(стрВернём,ПроверяемыйКусок);
глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,СпЗнСогласноФорматнойСтрокеВозвращаем,0,РазделительДробнойЧасти,РазделительТриад);
Возврат 1;
КонецЕсли;
СтрДляПроверки = Прав(стрВернём,1)+СтрДляПроверки;
стрВернём = Лев(стрВернём,СтрДлина(стрВернём)-1);
КонецЦикла;
Возврат 0;
КонецЕсли;
ИначеЕсли ПроверяемыйКусок = "~"//символы кроме букв
Тогда
Если (НомерПроверяемогоКуска = СпЗнПроверяемыеКуски.Количество())И
(СпЗнПроверяемыеКуски.Количество()>1)
Тогда
Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,"~",,,РазделительДробнойЧасти,РазделительТриад) = 0//последний кусок должен быть русскими буквами
Тогда Возврат 0;//если в последнем куске есть хотя бы один не символ
КонецЕсли;
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(СтрДляПроверки,ПроверяемыйКусок);
Возврат 1;
Иначе
ФорматнаяСтрокаСледующая = "";
Для П=НомерПроверяемогоКуска+1 По СпЗнПроверяемыеКуски.Количество()
Цикл ФорматнаяСтрокаСледующая=ФорматнаяСтрокаСледующая+СпЗнПроверяемыеКуски.Получить(П-1).Значение;
КонецЦикла;
стрВернём = "";
Пока СтрДлина(СтрДляПроверки)>0
Цикл
СимволДляПроверки = Врег(Лев(СтрДляПроверки,1));//!!переводим в верхнгий регистр
Если (СимволДляПроверки>="А")И
(СимволДляПроверки<="Я")
Тогда Прервать;
ИначеЕсли (СимволДляПроверки>="A")И
(СимволДляПроверки<="Z")
Тогда Прервать;
КонецЕсли;
стрВернём=стрВернём+Лев(СтрДляПроверки,1);
СтрДляПроверки = Сред(СтрДляПроверки,2);
КонецЦикла;
Пока СтрДлина(стрВернём)>0
Цикл
Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,,0,РазделительДробнойЧасти,РазделительТриад) = 1
Тогда
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(стрВернём,ПроверяемыйКусок);
глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,СпЗнСогласноФорматнойСтрокеВозвращаем,0,РазделительДробнойЧасти,РазделительТриад);
Возврат 1;
КонецЕсли;
СтрДляПроверки = Прав(стрВернём,1)+СтрДляПроверки;
стрВернём = Лев(стрВернём,СтрДлина(стрВернём)-1);
КонецЦикла;
Возврат 0;
КонецЕсли;
ИначеЕсли ПроверяемыйКусок = "$"//символы кроме чисел
Тогда
Если (НомерПроверяемогоКуска = СпЗнПроверяемыеКуски.Количество())И
(СпЗнПроверяемыеКуски.Количество()>1)
Тогда
Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,"~",,,РазделительДробнойЧасти,РазделительТриад) = 0//последний кусок должен быть русскими буквами
Тогда Возврат 0;//если в последнем куске есть хотя бы один не символ
КонецЕсли;
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(СтрДляПроверки,ПроверяемыйКусок);
Возврат 1;
Иначе
ФорматнаяСтрокаСледующая = "";
Для П=НомерПроверяемогоКуска+1 По СпЗнПроверяемыеКуски.Количество()
Цикл ФорматнаяСтрокаСледующая=ФорматнаяСтрокаСледующая+СпЗнПроверяемыеКуски.Получить(П-1).Значение;
КонецЦикла;
стрВернём = "";
Пока СтрДлина(СтрДляПроверки)>0
Цикл
СимволДляПроверки = Лев(СтрДляПроверки,1);
Если (СимволДляПроверки>="0")И
(СимволДляПроверки<="9")
Тогда Прервать;
КонецЕсли;
стрВернём=стрВернём+Лев(СтрДляПроверки,1);
СтрДляПроверки = Сред(СтрДляПроверки,2);
КонецЦикла;
Пока СтрДлина(стрВернём)>0
Цикл
Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,,0,РазделительДробнойЧасти,РазделительТриад) = 1
Тогда
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(стрВернём,ПроверяемыйКусок);
глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,СпЗнСогласноФорматнойСтрокеВозвращаем,0,РазделительДробнойЧасти,РазделительТриад);
Возврат 1;
КонецЕсли;
СтрДляПроверки = Прав(стрВернём,1)+СтрДляПроверки;
стрВернём = Лев(стрВернём,СтрДлина(стрВернём)-1);
КонецЦикла;
Возврат 0;
КонецЕсли;
ИначеЕсли ПроверяемыйКусок="N"
Тогда
Если (Лев(СтрДляПроверки,1)<"0")ИЛИ
(Лев(СтрДляПроверки,1)>"9")
Тогда Возврат 0;
Иначе
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
СтрДляПроверки = Сред(СтрДляПроверки,2);
КонецЕсли;
ИначеЕсли ПроверяемыйКусок = "I"
Тогда
Если (Лев(СтрДляПроверки,1)>="0")И
(Лев(СтрДляПроверки,1)<="9")
Тогда Возврат 0;
Иначе
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
СтрДляПроверки = Сред(СтрДляПроверки,2);
КонецЕсли;
ИначеЕсли ПроверяемыйКусок = "?"
Тогда
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
СтрДляПроверки = Сред(СтрДляПроверки,2);
ИначеЕсли ПроверяемыйКусок = "Y"
Тогда
Символ = Врег(Лев(СтрДляПроверки,1));
Если (Символ<"A")ИЛИ
(Символ>"Z")
Тогда Возврат 0;
Иначе
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
СтрДляПроверки = Сред(СтрДляПроверки,2);
КонецЕсли;
ИначеЕсли ПроверяемыйКусок = "Я"
Тогда
Символ = Врег(Лев(СтрДляПроверки,1));
Если (Символ<"А")ИЛИ
(Символ>"Я")
Тогда Возврат 0;
Иначе
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
СтрДляПроверки = Сред(СтрДляПроверки,2);
КонецЕсли;
ИначеЕсли ПроверяемыйКусок = "ё"
Тогда
Символ = КодСимвола(Лев(СтрДляПроверки,1));
Если (Символ<КодСимвола("а"))ИЛИ
(Символ>КодСимвола("я"))
Тогда Возврат 0;
Иначе
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
СтрДляПроверки = Сред(СтрДляПроверки,2);
КонецЕсли;
ИначеЕсли ПроверяемыйКусок = "Ё"
Тогда
Символ = КодСимвола(Лев(СтрДляПроверки,1));
Если (Символ<КодСимвола("А"))ИЛИ
(Символ>КодСимвола("Я"))
Тогда Возврат 0;
Иначе
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
СтрДляПроверки = Сред(СтрДляПроверки,2);
КонецЕсли;
ИначеЕсли ПроверяемыйКусок = "z"
Тогда
Символ = КодСимвола(Лев(СтрДляПроверки,1));
Если (Символ<КодСимвола("a"))ИЛИ
(Символ>КодСимвола("z"))
Тогда Возврат 0;
Иначе
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
СтрДляПроверки = Сред(СтрДляПроверки,2);
КонецЕсли;
ИначеЕсли ПроверяемыйКусок = "Z"
Тогда
Символ = КодСимвола(Лев(СтрДляПроверки,1));
Если (Символ<КодСимвола("A"))ИЛИ
(Символ>КодСимвола("Z"))
Тогда Возврат 0;
Иначе
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
СтрДляПроверки = Сред(СтрДляПроверки,2);
КонецЕсли;
ИначеЕсли ПроверяемыйКусок = "C"
Тогда
Символ = Врег(Лев(СтрДляПроверки,1));
Если ((Символ>="A")И
(Символ<="Z"))ИЛИ
((Символ>="А")И
(Символ<="Я"))
Тогда
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
СтрДляПроверки = Сред(СтрДляПроверки,2);
Иначе Возврат 0;
КонецЕсли;
ИначеЕсли Лев(ПроверяемыйКусок,1) = "&"
Тогда
Символ = Лев(СтрДляПроверки,1);
Если Символ = Сред(ПроверяемыйКусок,2,1)
Тогда
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
СтрДляПроверки = Сред(СтрДляПроверки,2);
Иначе Возврат 0;
КонецЕсли;
ИначеЕсли Лев(ПроверяемыйКусок,1) = "^"
Тогда
Символ = Врег(Лев(СтрДляПроверки,1));
Если Символ = Врег(Сред(ПроверяемыйКусок,2,1))
Тогда
СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
СтрДляПроверки = Сред(СтрДляПроверки,2);
Иначе Возврат 0;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НЕ ЗначениеЗаполнено(СтрДляПроверки)
Тогда Возврат 1;
Иначе Возврат 0;
КонецЕсли;
КонецФункции//глСтрокасоотвествуетФорматнойСтроке
Проверено на платформе 1С:Предприятие 8.3 (8.3.23.1997) Версия для разработчиков.