【问题标题】:Swift – How to remove special character without remove emoji from string?Swift – 如何在不从字符串中删除表情符号的情况下删除特殊字符?
【发布时间】:2019-11-20 21:07:48
【问题描述】:

如何在不删除表情符号的情况下从字符串中删除所有特殊字符?

我试过了:

func removeSpecialCharsFromString(text: String) -> String {
    let okayChars : Set<Character> = 
        Set("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890-& ".characters)
    return String(text.characters.filter {okayChars.contains($0) })
}

– 但此函数也会从字符串中删除表情符号。

预期结果:

“大家好!?需要一些钱吗????”

实际结果:

“大家好,需要钱吗???”

【问题讨论】:

  • 这可能会有所帮助 - stackoverflow.com/questions/30757193/…
  • @mag_zbc 谢谢,但我不知道该链接如何帮助我。我已经使用扩展来查看我的字符串是否包含表情符号。
  • “特殊字符”是什么意思?您的意思是“除表情符号外的任何非 ASCII”或“英文标点符号”或其他什么?字母 ü 会被视为特殊字符吗?
  • 我的意思是除了表情符号之外的所有非 ASCII 字符

标签: swift string special-characters emoji


【解决方案1】:

这里的问题是如何理解一个字符是否是表情符号。 Swift 有一个方便的isEmoji 方法供我们使用。

这里是使用isEmoji方法的更新函数:

func removeSpecialCharacters(from text: String) -> String {
    let okayChars = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890-& ")
    return String(text.unicodeScalars.filter { okayChars.contains($0) || $0.properties.isEmoji })
}

以防万一有人要在 Playground 中测试上面的代码:

let input = "Hello guys !? Need some money $ ?"
let output = removeSpecialCharacters(from: input)
print(output)                    // Prints: Hello guys  Need some money  ?

【讨论】:

    【解决方案2】:

    您可以使用以下扩展名来使您的句子根据所需的输出完美。

    extension String {
        var condensedWhitespace: String {
            let components = self.components(separatedBy: NSCharacterSet.whitespacesAndNewlines)
            return components.filter { !$0.isEmpty }.joined(separator: " ")
        }
    
        func removeSpecialCharacters() -> String {
            let okayChars = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890 ")
            return String(self.unicodeScalars.filter { okayChars.contains($0) || $0.properties.isEmoji })
        }
    }
    

    示例。

    let input = "Hello guys !? Need some money $ ?"
    
    print(input.removeSpecialCharacters().condensedWhitespace)
    // Hello guys Need some money ?
    

    【讨论】:

    • 很棒的家伙,它就像一个魅力!非常感谢!
    猜你喜欢
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2020-06-16
    • 2021-06-13
    相关资源
    最近更新 更多