统一类型标识符(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/