如何从电话号码字符串中删除少数数字 - Swift

时间:2015-05-18 09:03:06

标签: ios string swift

我几乎没有问题。我尝试在swift中格式化电话号码。现在我只有数字。

var number = "(123) 456-789"

let clean = "".join(number.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet))

问题是。如何在此字符串中检查0 ... 3中的索引。如果有类似“0044”或索引0 ... 1“44”的内容,则删除它。

3 个答案:

答案 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]+[)] |[-]",