Проверить строку на соответствие формата ГУИД

1. nikson_1987 05.02.21 20:02 Сейчас в теме
Добрый день.
Подскажите, как я могу проверить, что строка, которую я хочу преобразовать в ГУИД корректна?

Например, я загружаю данные из экселя, в колонке файла указаны ГУИД . Затем эти строки гуид я преобразую в тип ГУИД.
Так вот, если исходные данные кривые (5533222, вместо 0000-000000.....-00), то конструкция ГУИД = Новый УникальныйИдетификатор(МойГуид) падает с ошибкой.
По теме из базы знаний
Найденные решения
5. na688 05.02.21 21:16 Сейчас в теме
Через регулярное выражение
&НаКлиенте

    Тест_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 Тогда
        Сообщить("Подходит");
    Иначе
        Сообщить("НЕ подходит");
    КонецЕсли;

Показать
SedovSU@mail.ru; +1 Ответить
4. user856012 14 05.02.21 20:40 Сейчас в теме
(1)
ак я могу проверить, что строка, которую я хочу преобразовать в ГУИД корректна?
Как вариант:
1. Использовать РазложитьСтрокуВМассивПодстрок(НРег(СтрокаГУИД)) с разделителем "-".
2. Проверить количество элементов массива и длину каждого из них, если не соответствует формату - сразу браковать.
3. В каждой подстроке массива заменить символы "0123456789abcdef" на пустую строку и если после этого хоть в одной подстроке этого что-то осталось - браковать.

Только все вышесказанное не гарантирует, что GUID будет корректным (уникальным) - например, если такой уже есть в базе.

Поэтому совсем без Попытка...Исключение обойтись вряд ли получится.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SlavaKron 05.02.21 20:30 Сейчас в теме
(1) Попытку не предлагать?
4. user856012 14 05.02.21 20:40 Сейчас в теме
(1)
ак я могу проверить, что строка, которую я хочу преобразовать в ГУИД корректна?
Как вариант:
1. Использовать РазложитьСтрокуВМассивПодстрок(НРег(СтрокаГУИД)) с разделителем "-".
2. Проверить количество элементов массива и длину каждого из них, если не соответствует формату - сразу браковать.
3. В каждой подстроке массива заменить символы "0123456789abcdef" на пустую строку и если после этого хоть в одной подстроке этого что-то осталось - браковать.

Только все вышесказанное не гарантирует, что GUID будет корректным (уникальным) - например, если такой уже есть в базе.

Поэтому совсем без Попытка...Исключение обойтись вряд ли получится.
3. nikson_1987 05.02.21 20:34 Сейчас в теме
5. na688 05.02.21 21:16 Сейчас в теме
Через регулярное выражение
&НаКлиенте

    Тест_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 Тогда
        Сообщить("Подходит");
    Иначе
        Сообщить("НЕ подходит");
    КонецЕсли;

Показать
SedovSU@mail.ru; +1 Ответить
6. mvxyz 329 13.05.21 09:27 Сейчас в теме
СтроковыеФункцииКлиентСервер.ЭтоУникальныйИдентификатор(Идентификатор)

// Проверяет, является ли строка уникальным идентификатором.
// В качестве уникального идентификатора предполагается строка вида
// "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", где X = [0..9,a..f].
//
// Параметры:
//  Значение - Строка - проверяемая строка.
//
// Возвращаемое значение:
//  Булево - Истина, если переданная строка является уникальным идентификатором.
//
Функция ЭтоУникальныйИдентификатор(Знач Значение) Экспорт
...
Показать
Lutcenko; Igor030370; native-api; NikolayPopurey; SedovSU@mail.ru; ivan1703; voneska7; NoRazum; Xershi; kostik_love; user607345_soloviev.a.s; TreeDogNight; cheburashka; pyrkin_vanya; eeeio; walp; kanareyka; +17 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот