如何从字符串中删除特殊字符?

时间:2015-03-02 21:30:28

标签: regex string swift nsstring nscharacterset

我有一个包含我在字符串中允许的字符的集合:

var characterSet:NSCharacterSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ")

我想从字符串中删除任何其他字符,这样可以认为两个未格式化的数据是相同的,如下所示:

"American Samoa".lowercaseString == "american_samoa1".lowercaseString

这些转换后的字符串的小写版本为"americansamoa"

4 个答案:

答案 0 :(得分:9)

让我们为此编写一个函数(在swift 1.2中)。

func stripOutUnwantedCharactersFromText(text: String, set characterSet: Set<Character>) -> String {
    return String(filter(text) { set.contains($0) })
}

您可以这样称呼它:

let text = "American Samoa"
let chars = Set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
let strippedText = stripOutUnwantedCharactersFromText(text, set: chars)
纯粹的迅速。呀。

答案 1 :(得分:3)

你走在正确的轨道上。但是您可以在NSCharSet上使用invertedSet。这意味着您允许您在NSCharSet中设置的每个字符,因为这样做更容易。否则,你需要检查你不想允许的每个字符,而不是设置允许的字符数:

var charSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").invertedSet
var unformatted = "american_samoa1"
var cleanedString = join("", unformatted.componentsSeparatedByCharactersInSet(charSet))

println(cleanedString) // "americansamoa"

如您所见,我在创建的数组上使用join方法。我这样做是因为你真的想要一个字符串,否则就会有一个字符串数组。

答案 2 :(得分:2)

Swift 3 升级回答:

let jpegName = "<Hit'n'roll>.jpg"
let disallowedChars = CharacterSet.urlPathAllowed.inverted
let fileName = fileName.components(separatedBy: disallowedChars).joined(separator: "_")

答案 3 :(得分:0)

目前适用于swift 3.X

func strip(unformatted: String) -> String {
    let disallowedChars = CharacterSet.letters.inverted
    let formatted = unformatted.components(separatedBy: disallowedChars).joined(separator: "")
    return formatted.lowercased()
}