IE 2018

Получение номера без префикса и лидирующих нулей

Программирование - Универсальные функции

Номер префикс нули

1
Получение номера без префикса и лидирующих нулей с помощью регулярных выражений.

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

P.S. Тестирование проводилось на сервере 1С:Предприятие 8.3 (8.3.10.2561)

Обработка демонстрирует работу кода. При нажатии на кнопку в служебном сообщении будет выведен искомый номер. Под номером понимается максимально правое числовое значение строки, не начинающееся с нуля.

Функция размещается в модуле документа или любом общем модуле и вызывается просто.

НомерБезПрефиксаИНулей = ЧисловойНомер(НомерСПрефиксом)
Функция ЧисловойНомер (НомерСПрефиксом, Шаблон="[1-9]\d*", ИскатьДоПервогоСовпадения = Истина, МногоСтрок = Истина, ИгнорироватьРегистр = Истина) Экспорт

    RegExp = Новый COMОбъект("VBScript.RegExp");    // создаем объект для работы с регулярными выражениями

    //Заполняем данные
    RegExp.MultiLine = МногоСтрок;                  // истина — текст многострочный, ложь — одна строка
    RegExp.Global = Не ИскатьДоПервогоСовпадения;   // истина — поиск по всей строке, ложь — до первого совпадения
    RegExp.IgnoreCase = ИгнорироватьРегистр;        // истина — игнорировать регистр строки при поиске
    RegExp.Pattern = Шаблон;                        // шаблон (регулярное выражение)

    РезультатАнализаСтроки = RegExp.Execute(НомерСПрефиксом);


	Для Каждого Выражение Из РезультатАнализаСтроки Цикл
		Возврат Выражение.Value;
	КонецЦикла;


КонецФункции

 

1

Скачать файлы

Наименование Файл Версия Размер
Получение номера без префикса и лидирующих нулей:
.epf 6,72Kb
28.04.18
0
.epf 6,72Kb Скачать

См. также

Комментарии
Избранное Подписка Сортировка: Древо
1. Naposaram 176 28.04.18 11:42 Сейчас в теме
А, что там за такая "таблица префиксов". Чего я не знаю?
4. kraspila 19 02.05.18 10:31 Сейчас в теме
(1) Регистр сведений "ПрефиксыИнформационныхБаз"
2. V.Stavinsky 181 28.04.18 12:05 Сейчас в теме
а просто проверить вхождения каждого символа в "123456789"? и когда первый символ найдется далее искать в "0123456789". так не вариант?
3. CheBurator 3563 28.04.18 22:13 Сейчас в теме
с хвоста строки посимвольно проверяем вхождение в "0123456789".
нашли первый нецифровой символ - начиная со следующего за ним отрезали строку и применили Число() - так не пойдет? или я что-то не понял? смысл усложнять такую простую задачу регэкспами?
5. DrAku1a 1289 02.05.18 17:03 Сейчас в теме
Пока Номер<>"" и Найти("123456789", Лев(Номер, 1))=0 Цикл
Номер =Сред(Номер, 2);
КонецЦикла;
Номер = ?(Номер="", "0", Номер);
Если нужно быстрее, то заменить на
Ответ = "0";
Для НомерСимвола=1 по СтрДлина(Номер) Цикл
Если Найти("123456789", Сред(Номер, НомерСимвола, 1))>0 Тогда
Ответ = Сред(Номер, НомерСимвола);
Прервать;
КонецЕсли;
КонецЦикла;
Номер = Ответ;
Показать
Кода немного, при этом тягать регулярные выражения - нужды нет.
Оставьте свое сообщение