统一类型标识符(UTI)是在Mac OS X上识别文件类型的现代方法。在Apple的documentation中它说:
UTI定义为跟随反向域的字符串(CFString) 名称系统(DNS)约定。
然而,LaunchServices中的UTI相关函数不提供验证UTI的任何方法,即检查给定字符串是否是UTI并且符合UTI字符串格式(即仅使用合法字符等)。
UTI的维基百科页面说:
UTI使用反向DNS命名结构。名称可能包括ASCII 字符A-Z,a-z,0-9,连字符(“ - ”)和句点(“。”),以及所有字符 U + 007F以上的Unicode字符。[1]冒号和斜线是禁止的 与Macintosh和POSIX文件路径约定兼容。
验证UTI的正则表达式是什么样的?
答案 0 :(得分:1)
通过进一步搜索,我在Reverse domain name notation维基百科页面上找到了这个:
^[A-Za-z]{2,6}((?!-)\\.[A-Za-z0-9-]{1,63}(?<!-))+$
编译以下函数以验证包含UTI的NSString:
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];
}