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

在存储到数据库之前统一电话号码

柴辰阳
2023-03-14

我想从用户的电话通讯录中导入所有的联系人号码,并将其存储在数据库中,但由于我想稍后对其进行一些处理,所有的电话号码都应该具有统一的格式。

我在互联网上做了一些研究,发现电话号码有三种主要格式:(来源: googlei18n/libphonenumber)

  • 国际

然后我导出并提取我的电话联系号码,但我知道有很多来自不同国家和运营商的不同格式的号码。

这里有一些例子:

 0123456789
 0 12-345 6789
 +6012345678
 +27 60 123 4567‬
 09131234567
 +98 (310) 1234567
 00982101234567

基于谷歌的图书馆,如果你想把任何电话号码转换成不同的格式,我想,你必须知道它们属于哪个国家,在我的例子中,每个联系人都属于不同的国家。

现在,我的问题是,准备并将它们转换为一种特定格式的步骤是什么?

我需要知道这个操作的全部概念,但是如果你想写代码,任何编程语言都可以。

共有1个答案

哈雅珺
2023-03-14

这些答案使用python版本的libphonenumber,但其他端口的规则是相同的。

将任意国际号码转换为统一格式非常容易。。。

>>> import phonenumbers
>>> x = phonenumbers.parse('+1-904-566-6820')
>>> phonenumbers.is_valid_number(x)
True
>>> phonenumbers.format_number(x, phonenumbers.PhoneNumberFormat.INTERNATIONAL)
'+1 904-566-6820'

您不需要知道国际格式编号的国家(它的开头有一个“”。

>>> phonenumbers.format_number(phonenumbers.parse('+1-904-566-6820'), phonenumbers.PhoneNumberFormat.INTERNATIONAL)
'+1 904-566-6820'
>>> phonenumbers.format_number(phonenumbers.parse('+1 (904) 566-6820'), phonenumbers.PhoneNumberFormat.INTERNATIONAL)
'+1 904-566-6820'
>>> phonenumbers.format_number(phonenumbers.parse('+33 6 10 45 04 89'), phonenumbers.PhoneNumberFormat.INTERNATIONAL)
'+33 6 10 45 04 89'

只有当源号码不是有效的国际格式时,您才需要知道号码的国家/地区...

>>> phonenumbers.format_number(phonenumbers.parse('(904) 566-6820'), phonenumbers.PhoneNumberFormat.INTERNATIONAL)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home15/jgalloway12/code/wdPhone/phonenumbers/phonenumberutil.py", line 2450, in parse
    "Missing or invalid default region.")
phonenumbers.phonenumberutil.NumberParseException: (0) Missing or invalid default region.
>>> phonenumbers.format_number(phonenumbers.parse('(904) 566-6820', 'US'), phonenumbers.PhoneNumberFormat.INTERNATIONAL)
'+1 904-566-6820'

您传递给parse的国家代码仅在无法将输入号码解析为国际号码的情况下用作备用代码。

 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: telefne号和地址的mysql数据类型 关于将电话号码存储在数据库中的最佳做法有何建议?考虑一个美国电话号码: 555 555 1212 555-555-1212 (555)555 1212 5555551212 1-555-555-1212 1(555)555-1212 等等 … 我应该删除格式并仅存储数字吗?我应该只使用

  • 错误1264(22003):超出第1行“phone”列的范围值 为什么在错误…手机大小100但为什么超出范围…

  • 我有一个以字符串形式存储在Excel中的电话号码,Excel文件创建成功,数据没有错误,但每个电话号码旁边都有一个“数字存储为文本”错误。 我从网上了解到,我应该使用excel中包含的特殊电话号码格式或自定义的000-000-0000格式。我可以使用excel程序设置这些,但不能从我的Java代码中设置。 我四处寻找关于setCellType和DataFormat的信息,但我假设CellType必

  • 问题内容: 有人可以告诉我,在以下情况下如何进行? 接收文件(MS文件,ODS,PDF) 通过Apache Tika提取公元核心元数据+通过jackrabbit-content-extractors提取内容 使用Jackrabbit将文档(内容)及其元数据存储到存储库中 ? 检索文档+元数据 我对第3点和第4点感兴趣… 详细信息:该应用程序正在以交互方式处理文档(一些分析-语言检测,单词计数等。+

  • 问题内容: 我想将应用程序的版本号存储在MySQL数据库中,例如: 我应该使用哪种数据类型。 问题答案: 您有2个选择: 使用varchar 使用三个数字字段,主要,次要,补丁 同时使用。 每个选项都有其优点和缺点。 选项1只是一个字段,因此很容易获得版本。但这不一定是可排序的,因为从字典上讲2.0.0将高于10.0.0。 选项2可以很容易地进行排序,但是您必须获得三个字段。 选项3可以使用以下视

  • 当我运行它时,我得到一个no this session错误。