当前位置: 首页 > 知识库问答 >
问题:

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

湛光华
2023-03-14

我需要在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个答案

罗翔
2023-03-14

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

  1. NKVPhoneNumber
  2. Shsphone组分

NKVPhoneNumber用于选择国家代码,我在元数据中引入了phone\u格式,对其进行了一些修改。一旦从列表中选择了一个国家,它将返回一个国家对象,其中包括代码、扩展名、标志和格式\u占位符

SHSPhoneComponent然后使用该格式\u占位符验证格式。

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,

羊舌诚
2023-03-14

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

假设你的占位符是012345679,我相信你能做的是

  • 创建一个变量来存储此占位符
 类似资料:
  • 问题内容: 我想从iOS 9上的CNContact获取国家代码和电话号码。我尝试了很多事情,但找不到方法。我获得的最佳结果是打印: 这是我的方法: 我想要的是countryCode和数字的值。有什么想法如何在Swift中访问它们吗?谢谢! 问题答案: 不幸的是,由于它们是私有的,您无法获得它们。 这行得通,但是如果您在此行中做某事, 您的应用很可能会被拒绝。 您可以在这里看到所有可以使用的好东西。

  • 我有这样一个字符串:33123456789(法语电话号码)。我想在不知道国家的情况下提取国家代码(33)。例如,如果我有另一部来自另一个国家的手机,它应该可以工作。我使用谷歌图书馆https://code.google.com/p/libphonenumber/. 如果我知道国家,那很酷,我可以找到国家代码: 但是我找不到一种在不了解国家的情况下解析字符串的方法。

  • 我正在使用google库将国际电话号码转换为国家号码。 的一个示例是919744012345 我期望的是“9744012345”(请参阅印度的移动电话号码),但我得到的是带前导零的“09744012345”。 如何正确转换国际电话号码?

  • 我看到了一些与我要求的相似的问题,但似乎没有什么符合要求的。 我处于需要处理通话记录并使用电话号码确定国家的位置。拨打的号码可以是任何国家,例如: 44 7899455120-英国 34 965791845-西班牙 355 788415235-阿尔巴尼亚 显然,如果所有的呼叫代码都是两位数的话,这个世界将是美好的,但事实并非如此。目前,我有一个数据库,里面有国家及其相关代码,为了匹配,我需要有效地

  • 我想要电话号码的国家代码列表。例如,美国(1),英国(44)...我知道libphonenumber是一个帮助手机解析、格式化和验证的好工具。然而,它似乎没有列出所有国家代码的功能。但是那些数据应该在libphonenumber的元数据中,对吗?有人有这方面的经验吗?

  • 我的电话号码是字符串,如“91 96001 64500”(从google places API获取数据),我想提取电话号码(不带国家代码)以及国家代码,而不知道国家(国家可以是任何国家)。我怎样才能在弗利特做到这一点。 注意:已经有另一个完全相同的问题被问到,从电话号码[libphonenumber]中提取代码国家,但它是针对android的,我希望它是针对Flatter的。