我如何将信用卡号从 16 拆分为 4x4x4x4(无文本字段)

How can i split credit card number to 4x4x4x4 from 16(without textfield)

对于我的项目,我想在模板上显示信用卡号。

从我的 API 那里得到信用卡号码,如“4242424242424242”,但我需要用 space 重新格式化此号码,如“4242 4242 4242 4242”。

我读了一些主题,但人们总是用文本字段或类似的东西来解释。我有 16 个字符的长字符串变量,我需要使用 spaces.

将其重新格式化为 19 个字符的长字符串

我不需要任何验证,只想用 spaces 制作字符串。

因此我需要将这个字符串“4242424242424242”变成“4242 4242 4242 4242”这个字符串。

最后编辑:首先感谢大家的回答,很抱歉问了已经问过的问题。

这应该有效。虽然它不是特别可扩展。

let before = "4242424242424242"
let after = "\(before[0..<4]) \(before[4..<8]) \(before[8..<12]) \(before[12..<16])"

这是一种方法:

首先将字符串分割成4个等长的子串,可以用找到的这个方法here.

extension String {
    func split(by length: Int) -> [String] {
        var startIndex = self.startIndex
        var results = [Substring]()

        while startIndex < self.endIndex {
            let endIndex = self.index(startIndex, offsetBy: length, limitedBy: self.endIndex) ?? self.endIndex
            results.append(self[startIndex..<endIndex])
            startIndex = endIndex
        }

        return results.map { String([=10=]) }
    }
}

然后,您可以使用所需的分隔符连接拆分部分:

extension String {

    func inserting(_ c: Character, every index: Int) -> String {
        return self.split(by: index).joined(separator: c)
    }
}

用法:

let formatted = yourString.inserting(" ", every: 4)

将 replacingOccurrences(of:with:options:range:) 与正则表达式结合使用:

let creditCardNumber = "4242424242424242"// 16 or 15 digit 
let formattedCreditCardNumber = creditCardNumber.replacingOccurrences(of: "(\d{4})(\d{4})(\d{4})(\d+)", with: "   ", options: .regularExpression, range: nil)
print(formattedCreditCardNumber)// result 4242 4242 4242 4242

部分银联卡为19位:

let unionPayCardNumber = "4242424242424242123"
        let formattedUnionPayCardNumber = unionPayCardNumber.replacingOccurrences(of: "(\d{4})(\d{4})(\d{4})(\d{4})(\d+)", with: "    ", options: .regularExpression, range: nil)
print(formattedCreditCardNumber)// result 4242 4242 4242 4242 123