joh*_*les 66
这将根据Ismail的无效字符集删除文件名中任何位置的所有无效字符(我还没有验证他的设置是否完整).
- (NSString *)_sanitizeFileNameString:(NSString *)fileName {
NSCharacterSet* illegalFileNameCharacters = [NSCharacterSet characterSetWithCharactersInString:@"/\\?%*|\"<>"];
return [[fileName componentsSeparatedByCharactersInSet:illegalFileNameCharacters] componentsJoinedByString:@""];
}
Run Code Online (Sandbox Code Playgroud)
感谢Peter N Lewis使用componentsSeparatedByCharactersInSet的想法:
NSString - 仅转换为纯字母(即删除重音符号+标点符号)
Pet*_*sey 15
除非您显式运行shell或使用popen
or 等函数隐式运行shell,否则system
除了路径名分隔符之外没有理由转义任何内容.
您可能还希望强制文件名不以完全停止开始(这会导致Finder隐藏文件),并且可能还应该强制它不为空且少于NAME_MAX
字符*long.
*syslimits.h
表示字节,但是如果你浏览文件管理器,那就是字符.我不确定哪个适合Cocoa.
Swift 4中的解决方案
extension String {
var sanitizedFileName: String {
return components(separatedBy: .init(charactersIn: "/\:\?%*|\"<>")).joined()
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
"https://myurl.com".sanitizedFileName // = httpsmyurl.com
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14228 次 |
最近记录: |