【问题标题】:Regex to validate Uniform Type Identifier正则表达式验证统一类型标识符
【发布时间】:2016-03-18 10:22:02
【问题描述】:

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

一个 UTI 被定义为一个字符串 (CFString),它遵循一个反向域 名称系统 (DNS) 约定。

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

关于尿路感染的维基百科页面说:

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

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

【问题讨论】:

    标签: regex macos cocoa uti launch-services


    【解决方案1】:

    通过进一步搜索,我在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];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 2021-08-11
      • 1970-01-01
      • 2011-12-19
      • 2013-10-19
      相关资源
      最近更新 更多