Python 中的电话号码模块


简介

Python 的 phonenumbers 包简化了电话号码的解析、格式化和验证。该模块基于 Google 的 libphonenumber 包,为开发人员提供了一套强大的工具,以标准化的方式处理电话号码。phonenumbers 模块可以从用户输入中提取电话号码,验证其准确性,并根据国际标准对其进行格式化。

在这篇文章中,我们将探讨 phonenumbers 模块提供的众多功能和特性,并深入探讨实际应用,展示如何使用它们。我们将探索该模块的功能,并解释它如何简化 Python 应用程序中的电话号码处理,从解析和验证到格式化和提取关键信息。

Python 中的 Phonenumbers 模块实现

安装和导入

在探索 phonenumbers 模块的功能之前,我们必须将其安装并加载到我们的 Python 环境中。可以使用 Python 的包安装程序 pip 来安装该模块。安装完成后,我们可以使用 import 语句将 phonenumbers 模块添加到我们的交互式 Python 会话或脚本中。

示例

pip install phonenumbers import 
phonenumbers 

输出

Looking 	in 	indexes: 	https://pypi.ac.cn/simple, 	https://us-python.pkg.dev/colabwheels/public/simple/ 
Collecting phonenumbers 
  Downloading phonenumbers-8.13.11-py2.py3-none-any.whl (2.6 MB) 
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.6/2.6 
MB 37.6 MB/s eta 0:00:00 
Installing collected packages: phonenumbers 
Successfully installed phonenumbers-8.13.11 

解析电话号码

phonenumbers 模块的主要任务之一是从各种字符串表示形式中解析电话号码。无论电话号码是否包含国家代码,是否包含破折号或空格,模块提供的 parse() 函数都可以智能地解释和解析电话号码。解析后的电话号码对象包含有价值的信息,例如国家代码、国家号码、分机号等等。

示例

import phonenumbers 
 
# Parse a phone number number = "+14155552671"
 parsed_number = phonenumbers.parse(number, 
None) 
 
# Accessing parsed information 
print(parsed_number.country_code)  # Output: 1 
print(parsed_number.national_number)  # Output:4155552671 
print(parsed_number.extension)  # Output: None 

输出

1 
4155552671 
None 

电话号码验证

验证电话号码对于确保其符合正确的格式并可能可达至关重要。phonenumbers 模块提供各种验证方法来检查电话号码是否有效或可能有效。is_valid_number() 函数根据电话号码的语法和结构确定其是否有效。另一方面,is_possible_number() 函数检查电话号码是否可能有效,这意味着它具有有效的国家代码,但不一定符合有效号码的所有规则。

示例

import phonenumbers 
 
# Validate phone numbers 
valid_number = "+14155552671" invalid_number 
= "+1234567890" 
 
print(phonenumbers.is_valid_number(phonenumbers.parse(valid_number)))  # Output: True 
print(phonenumbers.is_valid_number(phonenumbers.parse(invalid_number)))  # Output: False 
 
print(phonenumbers.is_possible_number(phonenumbers.parse(valid_number))) 	 	
# Output: True 
print(phonenumbers.is_possible_number(phonenumbers.parse(invalid_number))) 	 	# 
Output: True 

输出

True 
False 
True 
False 

格式化电话号码

在向用户显示或将其存储在数据库中之前,以一致且统一的方式格式化电话号码至关重要。为了确保电话号码以适当的方式显示,phonenumbers 模块提供了许多格式化选项。

您可以使用 format_number() 方法根据多种样式(包括国际格式、国家格式和 E.164 格式)格式化解析后的电话号码。国家格式仅提供不带国家代码的国家显著号码,而国际格式还包括国家代码。E.164 格式包含国家代码和国家显著号码,它是一种标准化格式,不使用任何格式化符号。

示例

import phonenumbers 
 
# Format phone numbers parsed_number = phonenumbers.parse("+14155552671") 
 
# Format as international format print(phonenumbers.format_number(parsed_number, phonenumbers.PhoneNumberFormat.INTERNATIONAL)) 
 
# Format as national format 
print(phonenumbers.format_number(parsed_number, phonenumbers.PhoneNumberFormat.NATIONAL)) 
 
# Format as E.164 format 
print(phonenumbers.format_number(parsed_number, phonenumbers.PhoneNumberFormat.E164)) 

输出

+1 415-555-2671 
(415) 555-2671 
+14155552671 

从电话号码中提取信息

您可以使用 phonenumbers 模块从电话号码中收集重要数据。例如,您可以使用 geocoder 模块(phonenumbers 的子模块)来确定电话号码的位置。当您需要了解电话号码属于哪个国家、地区或运营商时,此功能在应用程序中非常有用。

示例

import phonenumbers from 
phonenumbers import geocoder 
 
# Parse a phone number number = "+14155552671" parsed_number = phonenumbers.parse(number, 
None) 
 
# Retrieve the geographic information location = geocoder.description_for_number(parsed_number, "en") 
print(location)  # Output: United States 

输出

San Francisco, CA 

高级用法:地理编码和运营商查找

借助 phonenumbers 模块的高级功能(例如运营商查找和地理编码),您可以了解有关电话号码的更多信息。geocoder 子模块提供工具来查找与电话号码关联的国家、地区和运营商。

可以使用 carrier 子模块的功能查找电话号码的运营商或服务提供商。需要运营商特定功能或必须验证运营商数据的应用程序可能会发现此功能很有用。

示例

import phonenumbers from phonenumbers 
import geocoder, carrier 
 
# Parse a phone number number = "+14155552671"
 parsed_number = phonenumbers.parse(number,None) 
 
# Retrieve the carrier information carrier_name = carrier.name_for_number(parsed_number, "en") 
print(carrier_name)  # Output: AT&T Mobility 
 
# Retrieve the geographic information location = geocoder.description_for_number(parsed_number, "en")
 print(location)  # Output: United States 

输出

‘***’ # cannot be disclosed 
San Francisco, CA 

处理国际电话号码

phonenumbers 模块还提供处理国际电话号码的功能。它允许您确定电话号码的区域或国家,并根据该区域的约定对其进行格式化。当处理来自不同国家的电话号码时,这尤其有用。

示例

import phonenumbers 
 
# Parse a phone number number = "+353876543210" 
parsed_number = phonenumbers.parse(number, None) 
 
# Get the region information 
region = phonenumbers.region_code_for_number(parsed_number) 
print(region)  # 

输出

IE

自定义和本地化

Python 的 phonenumbers 模块提供了自定义选项以满足独特的需求。通过创建新信息或导入特定位置的元数据,您可以更改模块的行为方式。这使您可以管理标准元数据可能无法处理的电话号码。通过提供其他信息,您可以扩展模块的功能以支持特殊的电话号码格式或编号方案。

此外,phonenumbers 模块支持本地化,使您能够以不同的语言和格式显示电话号码。您可以在格式化电话号码时指定所需的语言,确保输出符合指定语言的约定。此本地化功能在拥有全球用户群的应用程序中尤其有用,因为它通过以每个区域熟悉的和适当的格式呈现电话号码来增强用户体验。

最佳实践和注意事项

在处理敏感的用户数据时,必须考虑隐私和安全问题。遵守适用的数据保护法律,并采取必要的预防措施来保护电话号码。采取适当的预防措施以防止滥用或非法访问电话号码信息。

结论

Python 中的 phonenumbers 模块是用于解析、验证、格式化和管理电话号码的强大而便捷的工具。它广泛的功能范围,包括以各种格式解析电话号码、验证其正确性以及执行地理编码和运营商查找等高级操作,使其成为处理电话号码的应用程序的宝贵资产。凭借其对国际电话号码的支持、自定义选项和本地化功能,phonenumbers 模块为电话号码管理提供了一个全面的解决方案。通过利用此模块,开发人员可以确保在他们的 Python 项目中准确且一致地处理电话号码,从而增强功能、用户体验和数据完整性。

更新于:2023-07-25

3K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.