【问题标题】:Convert String to Postal code Format in swift快速将字符串转换为邮政编码格式
【发布时间】:2021-04-08 15:46:39
【问题描述】:

在应用程序中我有类似的字符串

1A11A1

我想把它转换成

1A1 1A1 

3个字符后应该有空格。

我尝试的是:代码 = 1A11A1

let end = code.index(code.startIndex, offsetBy: code.count)
        let range = code.startIndex..<end
    if code.count < 3 {
                code = code.replacingOccurrences(of: "(\\d+)", with: "$1", options: .regularExpression, range: range)
            }
            else {
                code = code.replacingOccurrences(of: "(\\d{3})(\\d+)", with: "$1 $2", options: .regularExpression, range: range)
            }

【问题讨论】:

  • 您可以只匹配单词字符而不是数字 (\\w{3})(\\w+) 并替换为两组 $1 $2(?&lt;!\\S)(\\w{3})(\\w+)

标签: swift string range


【解决方案1】:

如果您的规则是“3 个字符后有一个空格”,则取三个字符,添加一个空格,然后再添加其余部分:

let result = "\(code.prefix(3)) \(code.dropFirst(3))"
// "1A1 1A1"

【讨论】:

    【解决方案2】:

    Rob 的解决方案很好,只是为了它,还有一个使用insert(" ", at: index) 的选项,如下所示:

    extension String {
    
        var postalCode: String {
    
            var result = self
    
            // Check that this string is the right length
            guard result.count == 6 else {
                return result
            }
    
            let index = result.index(result.startIndex, offsetBy: 3)
    
            result.insert(" ", at: index)
            return result
        }
    }
    

    测试:

    let str: String = "1A11A1"
    print(str.postalCode) // prints 1A1 1A1
    let str2: String = "1A1 1A1"
    print(str2.postalCode) // prints 1A1 1A1 (doesn't change format)
    let str3: String = "12345"
    print(str3.postalCode) // prints 12345 (doesn't change format)
    

    【讨论】:

    • 谢谢你。但它是文本字段。所以当键盘回来时它不会工作。它只适用于字符串
    • @iosdeveloper 请编辑您的问题并在此处添加此信息。您正在尝试创建一个文本字段,可以即时格式化您的字符串。
    • 是的,如果它是一个文本字段,这是一个完全不同的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 2015-04-09
    • 1970-01-01
    • 2015-06-19
    • 2017-04-24
    • 2017-03-16
    • 2016-07-29
    相关资源
    最近更新 更多