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

Posted

技术标签:

【中文标题】iOS上国家代码的电话号码格式【英文标题】:Phone number format from country code on iOS 【发布时间】:2017-08-10 06:33:27 【问题描述】:

我需要在 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")

【问题讨论】:

请看how to ask a question部分。这也可能是相关的。 How to create a Minimal, Complete, and Verifiable example @RickBronger 我已经读过这个并且我的问题也是有效的,请不要在没有尝试理解问题的情况下气馁。这个问题与您的技能无关,也许这就是您无法理解的原因。否则,我问了一个非常直截了当的问题,并要求对我的问题提出建议,并与社区分享我的发现。另外,在发布之前,我会仔细检查是否有人对此问题有任何解决方案或方法。 我没有看到您的问题为解决您的问题所做的任何努力。代码 sn-p 都不会让您卡在我们可以提供帮助的地方。在我看来,您要求某人为您编写代码不是 *** 的工作方式。 @RickBronger 我们总是需要一个方向来努力做某事,直到现在我都找不到那个方向。没有必要发布每一次没有朝着正确方向前进的尝试。请参阅下面的答案和 cmets,您可能会在我的问题上找到一些努力。 【参考方案1】:

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

说让你的占位符是 012345679 我相信你可以做的是

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

【讨论】:

已经尝试过了,但是解析器为我提供了针对此字符串的无效电话号码。我尝试使用“(country_code)1231234567”并期望得到类似“+1(123)123-4567”的结果。但是没有 能否请您指定国家代码以便我查看示例项目 您可以使用我尝试过的任何国家/地区代码 +1、+91、+92 使用 PhoneNumberKit 第三方 我刚试过 phoneNumberKit.format(phoneNumberKit.parse("123456789", withRegion: "FR", ignoreType: false), toType: .international) 让我在这种情况下分享我的代码。请验证该代码。【参考方案2】:

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

    NKVPhoneNumber SHSPhoneComponent

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

【讨论】:

countryViewController 函数在我的项目中从未被调用过。我已经把 phoneFlag.phonePickerDelegate = self.我需要配置其他东西吗? @AndréVicente 我有同样的问题,我的应用程序总是崩溃,因为国旗是零。您找到解决此问题的方法了吗? 如果你能以某种方式分享你的代码,我可以帮忙...在选择你的标志是零或其他地方?

以上是关于iOS上国家代码的电话号码格式的主要内容,如果未能解决你的问题,请参考以下文章

iOS如何查找用户电话号码的国家代码?

Android:来电时的电话号码格式,确定国家代码?

Android 格式化包含国家代码的国际电话号码字符串

Android - 电话号码格式化和删除国家/地区代码

Android 和 IOS - 如何敲掉国家代码和电话号码前的 0

如何从电话号码中删除“+”和国家代码?