心流logo

phonenumbers怎么用这个库

phonenumbers 是一个非常强大的 Python 库,用于解析、格式化、验证和提取电话号码。它基于 Google 的 libphonenumber 项目,支持全球超过 240 个国家和地区的电话号码处理。以下是关于如何使用 phonenumbers 库的详细说明和示例。

1. 安装 phonenumbers 库

在使用 phonenumbers 之前,需要先安装它。可以通过 pip 命令进行安装:

pip install phonenumbers

2. 解析电话号码

phonenumbers 库的核心功能之一是解析电话号码。它可以从字符串中提取电话号码并将其转换为标准化的 PhoneNumber 对象。

示例代码:

import phonenumbers
# 解析电话号码
number = phonenumbers.parse("+861012345678", "CN") # "CN" 表示中国
# 输出解析后的信息
print(f"国家代码: {number.country_code}") # 输出: 86
print(f"国内号码: {number.national_number}") # 输出: 1012345678
print(f"是否有效: {phonenumbers.is_valid_number(number)}") # 输出: True

3. 格式化电话号码

phonenumbers 提供了多种格式化选项,可以将电话号码格式化为国际格式、国家格式、本地格式等。

示例代码:

import phonenumbers
# 解析电话号码
number = phonenumbers.parse("+861012345678", "CN")
# 格式化电话号码
print(phonenumbers.format_number(number, phonenumbers.PhoneNumberFormat.INTERNATIONAL)) # 输出: +86 10 12345678
print(phonenumbers.format_number(number, phonenumbers.PhoneNumberFormat.NATIONAL)) # 输出: 010-12345678
print(phonenumbers.format_number(number, phonenumbers.PhoneNumberFormat.E164)) # 输出: +861012345678

4. 验证电话号码

phonenumbers 提供了验证电话号码的功能,可以检查电话号码是否有效或可能有效。

示例代码:

import phonenumbers
# 解析电话号码
number = phonenumbers.parse("+861012345678", "CN")
# 验证电话号码
print(f"是否有效: {phonenumbers.is_valid_number(number)}") # 输出: True
print(f"是否可能有效: {phonenumbers.is_possible_number(number)}") # 输出: True

5. 从文本中提取电话号码

phonenumbers 还可以用于从文本中提取电话号码。这对于从用户输入或文档中提取电话号码非常有用。

示例代码:

import phonenumbers
from phonenumbers import PhoneNumberMatcher
def extract_phone_numbers(text):
 numbers = []
 for match in PhoneNumberMatcher(text, "CN"): # "CN" 表示中国电话号码
 numbers.append(match.number)
 return numbers
# 示例文本
text = "我在北京的电话号码是:+861234567890,我的手机号码是:18812345678,请随时联系我。"
# 提取电话号码
phone_numbers = extract_phone_numbers(text)
print(phone_numbers)

6. 获取电话号码的地理位置和运营商信息

phonenumbers 还可以用于获取电话号码的地理位置和运营商信息。

示例代码:

import phonenumbers
from phonenumbers import geocoder, carrier
# 解析电话号码
number = phonenumbers.parse("+861012345678", "CN")
# 获取地理位置
location = geocoder.description_for_number(number, "en")
print(f"地理位置: {location}") # 输出: China
# 获取运营商信息
service_provider = carrier.name_for_number(number, "en")
print(f"运营商: {service_provider}") # 输出: China Mobile

7. 结合 pydantic 进行电话号码验证

phonenumbers 可以与 `