如何删除除Swift中的CharacterSet之外的所有字符

tec*_*h74 11 ios swift

我正在尝试修剪电话号码并使用以下代码,但它不会修剪空格或" - ".我需要擦除除了给出的字符集中的所有字符

 func trimmedNumber(s : String)->String
 {
    let characterSet = NSCharacterSet(charactersInString: "+*#0123456789")
   let trimmedString =  s.stringByTrimmingCharactersInSet(characterSet.invertedSet)
    return trimmedString
}
Run Code Online (Sandbox Code Playgroud)

dal*_*ook 23

迅捷3/4:

let set = CharacterSet(charactersIn: "+*#0123456789")
let stripped = s.components(separatedBy: set.inverted).joined()
Run Code Online (Sandbox Code Playgroud)


ois*_*sdk 7

func trimmedNumber(s : String) -> String {
  let characterSet = Set("+*#0123456789".characters)
  return String(s.characters.lazy.filter(characterSet.contains))
}
Run Code Online (Sandbox Code Playgroud)

或者在Swift 1中:

func trimmedNumber(s : String) -> String {
  let characterSet = Set("+*#0123456789")
  return String(lazy(s).filter { characterSet.contains($0) })
}
Run Code Online (Sandbox Code Playgroud)


ma1*_*w28 5

将方法添加removingCharacters(in:)到 Swift 的String类型中。它返回一个新字符串,该字符串是通过从String.

例如:

let string = "+1-202-555-0141"
let set = CharacterSet(charactersIn: "+*#0123456789")
let sanitized = string.removingCharacters(in: set.inverted)
// sanitized is equal to "+12025550141"
Run Code Online (Sandbox Code Playgroud)

助手.swift

extension String {
  public func removingCharacters(in set: CharacterSet) -> String {
    let filtered = unicodeScalars.filter { !set.contains($0) }
    return String(String.UnicodeScalarView(filtered))
  }
}
Run Code Online (Sandbox Code Playgroud)

HelpersTests.swift

import XCTest

class HelpersTests: XCTestCase {
  func testRemovingCharacters() {
    let inputText1 = ""
    let set1 = CharacterSet.decimalDigits.inverted
    let sanitized1 = inputText1.removingCharacters(in: set1)
    XCTAssertEqual("", sanitized1)

    let inputText2 = " tab:\tspace: no-break_space: "
    let set2 = CharacterSet.whitespaces
    let sanitized2 = inputText2.removingCharacters(in: set2)
    XCTAssertEqual("tab:space:no-break_space:", sanitized2)

    let inputText3 = " aBc!@#12 $%^&*()-_=+[{]}\\|;:'\"3,<.>/?`~ "
    let set3 = CharacterSet.alphanumerics.inverted
    let sanitized3 = inputText3.removingCharacters(in: set3)
    XCTAssertEqual("aBc123", sanitized3)
  }
}
Run Code Online (Sandbox Code Playgroud)

另请参阅:在 Swift 中将 UnicodeScalar 数组转换为字符串