正则表达式验证统一类型标识符

时间:2015-12-12 15:32:09

标签: regex macos cocoa uti launch-services

统一类型标识符(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的正则表达式是什么样的?

1 个答案:

答案 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];
}