Регулярное выражение для проверки универсального идентификатора типа

Унифицированные идентификаторы типов (UTI) - это современный метод определения типов файлов в Mac OS X. В документации Apple говорится:

UTI определяется как строка (CFString), которая соответствует соглашению об обратной системе доменных имен (DNS).

Однако связанные с UTI функции в LaunchServices не предоставляют какого-либо метода для проверки UTI, то есть проверки, является ли данная строка UTI и соответствует ли формат строки UTI (т.е. использует только допустимые символы и т. Д.).

На странице Википедии об ИМП написано:

UTI используют структуру именования с обратным DNS. Имена могут включать символы ASCII AZ, az, 0-9, дефис ("-") и точку ("."), А также все символы Unicode выше U+007F.[1] Двоеточия и косые черты запрещены для совместимости с соглашениями о путях к файлам Macintosh и POSIX.

Как будет выглядеть регулярное выражение для проверки UTI?

1 ответ

Решение

Посредством дальнейшего поиска я нашел это на странице Википедии обратного доменного имени:

^[A-Za-z]{2,6}((?!-)\\.[A-Za-z0-9-]{1,63}(?<!-))+$

Придумал следующую функцию для проверки строки NSString, содержащей UTI:

BOOL UTTypeIsValid(NSString *inUTI) {
    NSString *reverseDNSRegEx = @"^[A-Za-z]{2,6}((?!-)\\.[A-Za-z0-9-]{1,63}(?<!-))+$";
    NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", reverseDNSRegEx];
    return [test evaluateWithObject:inUTI];
}
Другие вопросы по тегам