1С Сред, 1С Лев, 1С Прав — подстрока

Функции 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