Проверить строку на соответствие формата ГУИД
Добрый день.
Подскажите, как я могу проверить, что строка, которую я хочу преобразовать в ГУИД корректна?
Например, я загружаю данные из экселя, в колонке файла указаны ГУИД . Затем эти строки гуид я преобразую в тип ГУИД.
Так вот, если исходные данные кривые (5533222, вместо 0000-000000.....-00), то конструкция ГУИД = Новый УникальныйИдетификатор(МойГуид) падает с ошибкой.
Подскажите, как я могу проверить, что строка, которую я хочу преобразовать в ГУИД корректна?
Например, я загружаю данные из экселя, в колонке файла указаны ГУИД . Затем эти строки гуид я преобразую в тип ГУИД.
Так вот, если исходные данные кривые (5533222, вместо 0000-000000.....-00), то конструкция ГУИД = Новый УникальныйИдетификатор(МойГуид) падает с ошибкой.
По теме из базы знаний
- Поиск строки XML-файла, содержащей значение, не соответствующее типу свойства XDTO пакета
- Как прикрутить ГУИД к регистру сведений
- Новый сервис обновлений от 1С. Описание
- Мониторинг ПФР/Минтруда по приказу № Пр-366. Форма для сбора сведений о заработной плате работников бюджетной сферы. Автоматическое заполнение с возможностью корректировки и консолидации и выгрузка в формате XML. ЗГУ/ЗУП 3.1
- Выгрузка сведений в ЕГИССО из 1C БГУ 2.0
Найденные решения
Через регулярное выражение
&НаКлиенте
Тест_GUID = "01234567-89AB-CDEF-abcd-ef0123456789";
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = Ложь; //Игнорировать регистр
RegExp.Global = Истина; //Поиск всех вхождений шаблона
RegExp.MultiLine = Ложь; //Многострочный режим
RegExp.Pattern = "^[0-9A-Fa-f]{8}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{12}$";
Matches=RegExp.Execute(Тест_GUID);
ЧислоВхождений=Matches.Count();
Если ЧислоВхождений>0 Тогда
Сообщить("Подходит");
Иначе
Сообщить("НЕ подходит");
КонецЕсли;
Показать
(1)
1. Использовать РазложитьСтрокуВМассивПодстрок(НРег(СтрокаГУИД)) с разделителем "-".
2. Проверить количество элементов массива и длину каждого из них, если не соответствует формату - сразу браковать.
3. В каждой подстроке массива заменить символы "0123456789abcdef" на пустую строку и если после этого хоть в одной подстроке этого что-то осталось - браковать.
Только все вышесказанное не гарантирует, что GUID будет корректным (уникальным) - например, если такой уже есть в базе.
Поэтому совсем без Попытка...Исключение обойтись вряд ли получится.
ак я могу проверить, что строка, которую я хочу преобразовать в ГУИД корректна?
Как вариант:
1. Использовать РазложитьСтрокуВМассивПодстрок(НРег(СтрокаГУИД)) с разделителем "-".
2. Проверить количество элементов массива и длину каждого из них, если не соответствует формату - сразу браковать.
3. В каждой подстроке массива заменить символы "0123456789abcdef" на пустую строку и если после этого хоть в одной подстроке этого что-то осталось - браковать.
Только все вышесказанное не гарантирует, что GUID будет корректным (уникальным) - например, если такой уже есть в базе.
Поэтому совсем без Попытка...Исключение обойтись вряд ли получится.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
1. Использовать РазложитьСтрокуВМассивПодстрок(НРег(СтрокаГУИД)) с разделителем "-".
2. Проверить количество элементов массива и длину каждого из них, если не соответствует формату - сразу браковать.
3. В каждой подстроке массива заменить символы "0123456789abcdef" на пустую строку и если после этого хоть в одной подстроке этого что-то осталось - браковать.
Только все вышесказанное не гарантирует, что GUID будет корректным (уникальным) - например, если такой уже есть в базе.
Поэтому совсем без Попытка...Исключение обойтись вряд ли получится.
ак я могу проверить, что строка, которую я хочу преобразовать в ГУИД корректна?
Как вариант:
1. Использовать РазложитьСтрокуВМассивПодстрок(НРег(СтрокаГУИД)) с разделителем "-".
2. Проверить количество элементов массива и длину каждого из них, если не соответствует формату - сразу браковать.
3. В каждой подстроке массива заменить символы "0123456789abcdef" на пустую строку и если после этого хоть в одной подстроке этого что-то осталось - браковать.
Только все вышесказанное не гарантирует, что GUID будет корректным (уникальным) - например, если такой уже есть в базе.
Поэтому совсем без Попытка...Исключение обойтись вряд ли получится.
Через регулярное выражение
&НаКлиенте
Тест_GUID = "01234567-89AB-CDEF-abcd-ef0123456789";
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = Ложь; //Игнорировать регистр
RegExp.Global = Истина; //Поиск всех вхождений шаблона
RegExp.MultiLine = Ложь; //Многострочный режим
RegExp.Pattern = "^[0-9A-Fa-f]{8}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{12}$";
Matches=RegExp.Execute(Тест_GUID);
ЧислоВхождений=Matches.Count();
Если ЧислоВхождений>0 Тогда
Сообщить("Подходит");
Иначе
Сообщить("НЕ подходит");
КонецЕсли;
ПоказатьСтроковыеФункцииКлиентСервер.ЭтоУникальныйИдентификатор(Идентификатор)
// Проверяет, является ли строка уникальным идентификатором.
// В качестве уникального идентификатора предполагается строка вида
// "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", где X = [0..9,a..f].
//
// Параметры:
// Значение - Строка - проверяемая строка.
//
// Возвращаемое значение:
// Булево - Истина, если переданная строка является уникальным идентификатором.
//
Функция ЭтоУникальныйИдентификатор(Знач Значение) Экспорт
...
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот