我有一个通过以下方式使用联系人数据的应用程序:

  • 从客户端发送短信
  • 从我们的服务器上发送短信
  • 要将用户的电话号码上传到其他人可以匹配的数据库中

  • 这在美国可以正常使用,但国际化有一系列问题。这些是我使其工作的假设:

    #1-从客户端发送SMS很简单。按原样使用地址簿中的数字(不进行标准化),然后让操作系统将其找出来。如果他们可以通过给定的号码拨打电话,他们可能会发送短信(是吗?)

    #2 /#3-从服务器发送SMS更复杂。大多数SMS API需要国际符号(“+”前缀和国家/地区代码),而用户在其联系人列表中将具有各种带有各种前缀(地区代码,国家/地区代码等)的各种本地和全局电话号码。因此,这里需要规范化。在数据库中匹配用户的电话号码也需要规范化。

    为了规范电话号码,我必须首先确定用户是否打算通过查找“+”,“011”和“00”前缀来指定全局号码。如果是这样,我删除前缀,将其替换为“+”并使用该数字。

    如果我认为该号码是本地号码,则可以尝试自己添加国家代码(启发式方法,不可靠)。这需要知道用户的默认国家/地区代码。在iPhone上,我可以获取用户的首选区域(可以选择)以及用户的MCC和MNC(取决于位置?)。我倾向于用户选择的国家/地区代码,因为大多数本地电话号码很有可能是该国家/地区的电话。

    我相信这是我最好的方法,无需解析整数,也无需弄清区号和其他组成部分。我假设大多数国家/地区都允许将“0”作为其国家/地区代码的前缀。

    合理?有没有更简单/更明智的方式来做到这一点?

    最佳答案

    #1这是一个合理的假设,除非用户出国。

    #2 /#3要进行更可靠的标准化,您需要获取用户的大致位置。这是伪代码:

  • (如果数字以“+”开头),则保持不变,即
  • else获取用户的当前国家(请参阅this post):
  • 如果果馅饼带有country exit codes,则将其替换为“+”
  • 如果以国家/地区代码开头,请添加“+”
  • 如果以“0”开头,则将其替换为“+”
  • else,假设它是本地号码,然后添加区号和国家/地区代码。
    由于这一步骤的复杂性,可能更容易提示用户输入一些信息,例如其当前的区号和国家/地区代码或位置。
  • 关于ios - 在iPhone上处理国际电话号码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3103393/

    10-13 04:14