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

时间:2019-07-11 07:55:36

标签: ios swift string special-characters emoji

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

我尝试过:

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

但是此功能也会从字符串中删除我的表情符号。

预期结果:

  

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

实际结果:

  

“大家好,需要钱?”

2 个答案:

答案 0 :(得分:2)

这里的问题是如何理解字符是否是表情符号。 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  ?

答案 1 :(得分: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 ?