Функции 1С Сред(Строка, СПозиции, КоличествоСимволов), 1С Лев(Строка, КоличествоСимволов) и 1С Прав(Строка, КоличествоСимволов) возвращают часть строки (т.е. подстроку).
Например:
- Выполняем 1С Сред(«Ежик смеялся и кушал кактус», 6, 7) //с позиции буквы «х» — 7й, 6 букв
- 1С возвращает «смеялся»
- Выполняем 1С Лев(«Ежик смеялся и кушал кактус», 4) //с начала (слева) 4 букв
- 1С возвращает «Ежик»
- Выполняем 1С Прав(«Ежик смеялся и кушал кактус», 6) //с конца (справа) 6 букв
- 1С возвращает «кактус»
Усовершенствуем наш анализатор текста. Пусть на вход ему будет подаваться номер телефона, а он форматирует его, например «89015553366 в +7(901)555-33-66», с использованием функций 1С Сред, 1С Лев, 1С Прав.
[VIP_CONTENT]
//В эту функцию мы будем далее вписывать код
Функция АнализТекста(Текст)
Сообщить("Было: " + Текст);
//Проверим, что на выходе подан действительно номер телефона
//Он может быть в следующем формате: с или без 8 или 7 в начале, в начале может быть плюс, уже может быть форматирование с символами: ()-
НомерТелефона = СокрЛП(Текст); //уберем пробелы, если они были
//уберем лишние символы форматирования ()- и ведущий +, если они есть
НомерТелефона = СтрЗаменить(Текст, "+", ""); //заменяем символ на пустую строку, т.е. на "ничего"
НомерТелефона = СтрЗаменить(Текст, "-", "");
НомерТелефона = СтрЗаменить(Текст, "(", "");
НомерТелефона = СтрЗаменить(Текст, ")", "");
НомерТелефона = СтрЗаменить(Текст, " ", "");
//Теперь в теории длина строки должна быть 10-11 цифр
//Теперь в теории остались только цифры
//Если длина 11 цифр, то ведущая цифра 7 или 8
Попытка
чНомер = Число(НомерТелефона); //проверям, что в номере телефона только цифры - при преобразовании к числу НЕ цифры дают исключение
Если СтрДлина(НомерТелефона) <> 10 и СтрДлина(НомерТелефона) <> 11 Тогда //проверяем на длину
ВызватьИсключение "Неверная длина номера телефона"; //генерируем собственное исключение
КонецЕсли;
Если СтрДлина(НомерТелефона) = 11 и Лев(НомерТелефона, 1) <> "8" и Лев(НомерТелефона, 1) <> "7" Тогда //проверяем первую цифру
ВызватьИсключение "В 11-значном номере телефона первая цифра должна быть 7 или 8"; //генерируем собственное исключение
Иначе
НомерТелефона = Прав(НомерТелефона, СтрДлина(НомерТелефона) - 1); //убираем первую цифру, так как она нам не нужна
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки()); //посмотрим, что нам сообщает система
//сюда мы попадаем только если в проверке была ошибка
Сообщить("Ошибка: в номере телефона должны быть только цифры, длина номера телефона 10 цифр (возможно добавить 8 или +7 в начале)");
Возврат Текст; //это - функция и мы не можем не "вернуть" никакого значения; обычно при ошибке возвращают Ложь или Неопределено или пустую строку, мы вернем входящий номер для возможности дальнейшего использования, пусть даже в неотформатированном виде, если это будет необходимо
КонецПопытки;
//теперь "входящий" номер телефона должен быть в нужном виде
Сообщить("Было (отформатировано): " + НомерТелефона);
//форматируем номер телефона: берем три первых цифры, потом 2 раза по 2 цифры, и 2 цифры с конца
НомерТелефона = "+7(" + Лев(НомерТелефона, 3) + ")" + Сред(НомерТелефона, 4, 2) + "-" + Сред(НомерТелефона, 6, 2) + "-" + Прав(НомерТелефона, 2);
Сообщить("Стало: " + НомерТелефона);
Возврат НомерТелефона;
КонецФункции
[/VIP_CONTENT]
В результате выполнения нашей усовершенствованной функции, 1С нам сообщит:
Было: 89015553366
Было (отформатировано): 9015553366
Стало: +7(901)55-53-66