统一类型标识符(UTI)是在Mac OS X上识别文件类型的现代方法。在Apple的documentation中,它表示:


  UTI定义为跟随反向域的字符串(CFString)
  名称系统(DNS)约定。


但是,LaunchServices中与UTI相关的功能没有提供任何方法来验证UTI,即检查给定的字符串是否为UTI并符合UTI字符串格式(即仅使用合法字符等)。

UTI上的Wikipedia页面上说:


  UTI使用反向DNS命名结构。名称可能包含ASCII
  字符A-Z,a-z,0-9,连字符(“-”)和句点(“。”),以及所有
  U + 007F以上的Unicode字符。[1]禁止冒号和斜线
  与Macintosh和POSIX文件路径约定的兼容性。


用于验证UTI的正则表达式是什么样的?

最佳答案

通过进一步的搜索,我在Reverse domain name notation Wikipedia页面上发现了这一点:

^[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];
}

关于regex - 正则表达式验证统一类型标识符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34241591/

10-09 16:31