我几乎没有问题。我尝试在swift中格式化电话号码。现在我只有数字。
var number = "(123) 456-789"
let clean = "".join(number.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet))
问题是。如何在此字符串中检查0 ... 3中的索引。如果有类似“0044”或索引0 ... 1“44”的内容,则删除它。
答案 0 :(得分:1)
let number = "0044 123 456-7890"
let numberArray = map(number) { String($0) }
let numbersOnly = numberArray.filter { $0.toInt() != nil }
let numbers = "".join(numbersOnly.reverse()[0...9].reverse())
println(numbers) // Prints "1234567890"
这只是为了给你一个如何完成它的一般例子。我真的不喜欢使用固定数字作为索引。如果您的电话号码始终至少有10个号码,这应该是安全的。
更新了Swift 4的答案。
它现在安全且易于使用!
let number = "0044 123 456-7890"
let numberArray = number.map { String ($0) }
var numbersOnly = numberArray.filter { Int($0) != nil }
let remove = numbersOnly.count > 3 ? numbersOnly[...3].joined() == "0044" : false
let result = numbersOnly[(remove ? 4 : 0)...]
print(result) // 1234567890
答案 1 :(得分:1)
感谢。我使用了其他答案,并为它添加了一个扩展(我在这里包含了其他答案的一些范围内容)
extension String {
subscript (i: Int) -> Character {
return self[self.startIndex.advancedBy(i)]
}
subscript (i: Int) -> String {
return String(self[i] as Character)
}
subscript (r: Range<Int>) -> String {
let start = startIndex.advancedBy(r.startIndex)
let end = start.advancedBy(r.endIndex - r.startIndex)
return self[Range(start ..< end)]
}
func phoneFormat() -> String {
let numbers = self.stringByReplacingOccurrencesOfString("[^\\d]", withString: "", options: .RegularExpressionSearch)
let tenchars = numbers.characters.suffix(10)
if tenchars.count != 10 {
return self
}
let last10 = String(tenchars)
return last10[0...2] + "-" + last10[3...5] + "-" + last10[6...9]
}
}
然后你就做了:
"1 (208) 754-2323".phoneFormat()
它出来干净:“208-754-2323”
答案 2 :(得分:0)
试试这个:
var number = "(123) 456-789"
let clean:NSString = number.stringByReplacingOccurrencesOfString(
"[(][1-9]+[)] |[-]",