Swift中如何修改String扩展实现过滤指定符号与所有emoji
实现方案
你可以直接调整原有过滤逻辑,先做emoji判断筛除所有表情,再走原有特殊字符过滤流程即可,修改后的代码如下:
完整扩展代码
extension String { func removeCharacters() -> String { let removeCharacters: CharacterSet = [" ", ";", ",", ":", ".", "!", "%", "$", "&", "#", "*", "^", "@", "(", ")", "/"] return self.filter { char in // 筛除所有带emoji展示属性的字符 guard !char.isEmojiPresentation else { return false } // 保留不在指定移除字符集内的普通字符 return char.unicodeScalars.allSatisfy { !removeCharacters.contains($0) } } } }
改动说明
- 完全保留了原有过滤指定特殊字符的功能,没有修改原有的字符移除规则
- 新增前置判断逻辑,只要是符合
isEmojiPresentation == true的字符都会被直接移除 - 逐字符校验的逻辑兼容多字节emoji的识别,不会出现emoji过滤不完整的问题
注意事项
isEmojiPresentation是iOS 16.0+、macOS 13.0+才提供的系统属性,如果你的项目需要兼容更低系统版本,可以自行替换为低版本兼容的emoji判断逻辑即可。
使用示例
let originalStr = "😀Hello, 世界!🤣 今天是个好天气@2024" let filteredStr = originalStr.removeCharacters() // 输出结果:Hello世界今天是个好天气2024
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

