PhoneNumberKit 3.8.0

PhoneNumberKit 3.8.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最新发布2024年8月
SPM支持 SPM

Roy MarmelsteinZonily Jame PesqueraBruno Guidolim 维护。



  • Roy Marmelstein

PhoneNumberKit Platform GitHub Workflow Status (with branch) Version Carthage compatible

PhoneNumberKit

Swift 5.3 框架,用于解析、格式化和验证国际电话号码。灵感来自 Google 的 libphonenumber。

功能

功能
☎️ 验证、归一化和提取任何电话号码字符串的元素。
💯 简单的 Swift 语法和轻量级的易于阅读的代码库。
🏁 快速。1000 次解析 -> 大约 0.4 秒。
📚 来自 Google 的 libPhoneNumber 项目的最佳级元数据。
🏆 完全测试以确保与 Google 的 JavaScript 实现 libPhoneNumber 的准确性匹配。
📱 为 iOS 构建。自动从手机获取默认区域代码。
📝 可编辑的 (!) AsYouType 格式化器为 UITextField。
🇺🇸 将国家代码转换为国家名称,反之亦然

用法

在将交互电话号码的Swift文件顶部导入PhoneNumberKit。

import PhoneNumberKit

您所有与PhoneNumberKit的交互都通过PhoneNumberKit对象完成。您应该采取的第一步是分配一个。

PhoneNumberKit实例的分配相对昂贵(它解析元数据并在对象的生命周期内将其保留在内存中),您应该确保PhoneNumberKit一旦分配就不再需要时进行释放。

let phoneNumberKit = PhoneNumberKit()

要解析字符串,请使用parse函数。区域代码会自动计算,但可以在需要时覆盖。PhoneNumberKit自动执行硬类型验证以确保创建的对象有效,这在性能上可能相当昂贵,如需可关闭此功能。

do {
    let phoneNumber = try phoneNumberKit.parse("+33 6 89 017383")
    let phoneNumberCustomDefaultRegion = try phoneNumberKit.parse("+44 20 7031 3000", withRegion: "GB", ignoreType: true)
}
catch {
    print("Generic parser error")
}

如果您需要一次性解析和验证大量号码,PhoneNumberKit有一个特殊的高速数组解析函数。默认区域代码会自动计算,但需要时可覆盖。在这里,如果不是必需的,您也可以忽略硬类型验证。无效号码在结果数组中会被忽略。

let rawNumberArray = ["0291 12345678", "+49 291 12345678", "04134 1234", "09123 12345"]
let phoneNumbers = phoneNumberKit.parse(rawNumberArray)
let phoneNumbersCustomDefaultRegion = phoneNumberKit.parse(rawNumberArray, withRegion: "DE",  ignoreType: true)

PhoneNumber对象是不可变的Swift结构体,具有以下属性

phoneNumber.numberString
phoneNumber.countryCode
phoneNumber.nationalNumber
phoneNumber.numberExtension
phoneNumber.type // e.g Mobile or Fixed

将PhoneNumber对象格式化为字符串也非常简单

phoneNumberKit.format(phoneNumber, toType: .e164) // +61236618300
phoneNumberKit.format(phoneNumber, toType: .international) // +61 2 3661 8300
phoneNumberKit.format(phoneNumber, toType: .national) // (02) 3661 8300

PhoneNumberTextField

AsYouTypeFormatter

要使用AsYouTypeFormatter,只需将您的UITextField替换为PhoneNumberTextField(如果您正在使用Interface Builder,请确保模块字段已设置为PhoneNumberKit)。

您可以通过以下方式自定义TextField UI

  • withFlag会显示当前区域的国家代码。flagButton将显示在文本框的leftView中,其大小根据您的文本大小设置。
  • withExamplePlaceholder使用attributedPlaceholder来显示当前区域的示例号码。此外,当withPrefix设置时,国家代码的前缀将自动插入和删除。

PhoneNumberTextField会自动格式电话号码并提供用户完整的编辑能力。如果您想要自定义,可以直接使用PartialFormatter。默认区域代码会自动计算,但需要时可以覆盖(请参见下面的示例)。

class MyGBTextField: PhoneNumberTextField {
    override var defaultRegion: String {
        get {
            return "GB"
        }
        set {} // exists for backward compatibility
    }
}
let textField = PhoneNumberTextField()

PartialFormatter().formatPartial("+336895555") // +33 6 89 55 55

您还可以查询国家的区号或将给定国家的区号查询出来

phoneNumberKit.countries(withCode: 33)
phoneNumberKit.countryCode(for: "FR")

需要更多自定义?

您可以访问驱动PhoneNumberKit的元数据,这使得您能够编程实现 PhoneNumberKit 自身可能实现的行为。但这意味着您将暴露于底层文件格式不太完善的接口。如果您编程了有用的内容,请将其推向上游!

phoneNumberKit.metadata(for: "AU")?.mobile?.exampleNumber // 412345678

[推荐] 使用 Swift Package Manager 配置

Swift Package Manager 现在是 PhoneNumberKit 的首选分发工具。

从 Xcode 11+ 开始

  1. 选择文件 > Swift 包 > 添加包依赖。在“选择包仓库”对话框中输入 https://github.com/marmelroy/PhoneNumberKit.git
  2. 在下一页,将版本解析规则指定为“到下一个主要版本”从“3.6.0”。
  3. 在 Xcode 检出源并解析版本后,您可以选择“PhoneNumberKit”库并将其添加到您的应用程序目标中。

有关更多信息,请阅读 Apple 的将包依赖项添加到您的应用程序

或者,您也可以将 PhoneNumberKit 添加到您的 Package.swift 文件中

dependencies: [
    .package(url: "https://github.com/marmelroy/PhoneNumberKit", from: "3.6.0")
]

使用 Carthage 配置

Carthage 是一个去中心化的依赖管理器,它可以自动化将框架添加到您的 Cocoa 应用程序的过程。

您可以使用以下命令通过 Homebrew 安装 Carthage:

$ brew update
$ brew install carthage

要使用 Carthage 将 PhoneNumberKit 集成到您的 Xcode 项目中,请在您的 Cartfile 中指定它

github "marmelroy/PhoneNumberKit"

使用 CocoaPods 配置

pod 'PhoneNumberKit', '~> 3.6'