Python 中的多面体

machine learningpythonserver side programming

简介

使用 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.org/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 
 
# 解析电话号码
number = "+14155552671"
parsed_number = phonenumbers.parse(number, None)

# 访问解析的信息
print(parsed_number.country_code) # 输出:1
print(parsed_number.national_number) # 输出:4155552671
print(parsed_number.extension) # 输出:无

输出

1
4155552671
无

电话号码验证

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

示例

import phonenumbers

# 验证电话号码
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

# 格式化电话号码
parsed_number =phonenumbers.parse("+14155552671")

# 格式化为国际格式print(phonenumbers.format_number(parsed_number, phonenumbers.PhoneNumberFormat.INTERNATIONAL))

# 格式化为国家格式
print(phonenumbers.format_number(parsed_number, phonenumbers.PhoneNumberFormat.NATIONAL))

# 格式化为 E.164 格式
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

# 解析电话号码 number = "+14155552671"
parsed_number = phonenumbers.parse(number, None)

# 检索地理信息 location = geocoder.description_for_number(parsed_number, "en")
print(location) # 输出

输出

San Francisco, CA 

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

借助 phonenumbers 模块的复杂功能(如运营商查询和地理编码),您可以了解有关电话号码的更多信息。地理编码子模块提供用于定位与电话号码相关的国家、地区和运营商的工具。

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

示例

import phonenumbers
from phonenumbers import geocoder, carrier

# 解析电话号码
number = "+14155552671"
parsed_number = phonenumbers.parse(number, None)

# 检索运营商信息
carrier_name = carrier.name_for_number(parsed_number, "en")
print(carrier_name) # 输出:AT&T Mobility

# 检索地理信息
location = geocoder.description_for_number(parsed_number, "en")
print(location) # 输出:美国

输出

'***' # 无法披露
加利福尼亚州旧金山

处理国际电话号码

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

示例

import phonenumbers

# 解析电话号码
number = "+353876543210"
parsed_number = phonenumbers.parse(number, None)

# 获取区域信息 region = phonenumbers.region_code_for_number(parsed_number)
print(region) #

输出

IE

自定义和本地化

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

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

最佳实践和注意事项

处理敏感用户数据需要考虑隐私和安全问题。 遵守任何适用的数据保护规则并采取适当措施保护电话号码。 采取必要的保护措施,防止滥用或未经授权访问电话号码信息。

结论

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


相关文章