iOS上国家/地区代码的电话号码格式

时间:2017-08-10 06:33:28

标签: ios swift3 libphonenumber

我需要在 UITextField 中将电话号码格式显示为占位符。我怎么能这样做?

对于国家/地区选择,我使用下面提到的图书馆,并根据用户选择的国家/地区提供国家/地区和国家/地区代码。

https://github.com/NikKovIos/NKVPhonePicker

选择国家/地区后,我需要显示所选国家/地区的电话号码格式,并且在提交该电话号码后,我必须验证电话号码。

我还发现第三方( PhoneNumberKit )的灵感来自谷歌的libphonenumber,但它用于验证,它不提供针对国家/地区代码的预期电话号码格式。以下是链接。

https://github.com/marmelroy/PhoneNumberKit

更新1: 试过这个并获得通用解析器错误

let phoneNumberKit = PhoneNumberKit()

do {
    let phoneNumber = try phoneNumberKit.parse("+921230123456")
}
catch {
    print("Generic parser error")
}

更新2: 更新了代码,仍然出现异常

let phoneNumberKit = PhoneNumberKit()

do {
    let phoneNumber = try phoneNumberKit.parse("1230123456", withRegion: "FR", ignoreType: false)
    let formatedNumber = phoneNumberKit.format(phoneNumber, toType: .international)
    print(formatedNumber)
}
catch {
    print("Generic parser error")
}

2 个答案:

答案 0 :(得分:2)

我不知道这是否是一个有效的解决方案,你可以试试这个

说让你的占位符为012345679我认为你可以做的是

  • 创建一个存储此占位符的变量
  • 根据用户选择的国家/地区解析此占位符。
  • 将已解析的一个设置为文本字段中的占位符。

答案 1 :(得分:0)

对于那些想做同样事情的人,我使用了两个不同的第三方来实现这个功能。

  1. NKVPhoneNumber
  2. SHSPhoneComponent
  3. NKVPhoneNumber 用于选择国家/地区代码,我已经在元数据中修改了一点介绍phone_format。从列表中选择一个国家/地区后,它会返回一个Country对象,其中包含Code, Extension, Flag and format_placeholder

    SHSPhoneComponent 然后使用format_placeholder来验证格式。

    import SHSPhoneComponent
    import NKVPhonePicker
    
    @IBOutlet weak var phoneTF: SHSPhoneTextField!
    @IBOutlet weak var phoneFlag: NKVPhonePickerTextField!
    @IBOutlet weak var lblCountryCode: UILabel!
    
    //MARK: - NKV callback delegates
    
    func countriesViewController(_ sender: CountriesViewController, didSelectCountry country: Country) {
        //
    
        phoneTF.formatter.setDefaultOutputPattern(country.formatPattern)
        phoneTF.text = ""
        phoneTF.placeholder = country.formatPatternPlaceHolder
        countryCode = "+\(country.phoneExtension)"
    
        lblCountryCode.text = countryCode
    }
    

    注意:我已将 NVKPhoneNumber 转换为 Swift 4.0