Python 电话号码验证
这篇 Python 文章将展示我们如何使用 Python 的电话号码库验证电话号码。 我们将学习使用 Python 来验证电话号码,然后根据地区、国家、大洲和运营商对其进行格式化以进行显示。
我们将从一个简单的示例开始,然后转向一个复杂的示例。 那么让我们开始吧,让 Python 验证和格式化电话号码。
在 Python 中验证电话号码
验证和验证电话号码的正确性可能非常具有挑战性。 电话号码的格式可能因我们所在的国家/地区而异。
即使在同一个国家内,也可能存在显着差异。 一些国家使用相同的国家代码,而另一些国家使用多个国家代码。
有些国家甚至多次使用同一个国家代码。
谷歌 GitHub 上的 libphonenumber 存储库中的一个插图表明,美利坚合众国、加拿大和加勒比海岛屿都使用相同的国际拨号代码 +1。
可以使用塞尔维亚、斯洛文尼亚或摩洛哥的国家代码从科索沃拨打这些电话号码。 这些只是识别或验证电话号码时的一些困难。
乍一看,似乎可以使用 RegEx 来验证电话号码的国家/地区代码。 然而,这表明要验证一个国家的代码,我们必须为全球每个国家创建一个唯一的 RegEx 规则。
此外,每个手机运营商都有指南(例如,某些数字只能在特定范围内使用)。 我们可以看到事情有可能迅速失控,这将使我们自己验证电话号码输入变得极其困难。
在 Python 中使用电话号码库
我们很幸运,因为 Python 库可以有效地指导我们完成验证过程。 该库源自 Google 的 libphonenumber 库,该库也可用于其他编程语言,如 C++、Java 和 JavaScript。
Python Phonenumbers 库是使用此库创建的。
本文将向我们展示如何使用 Python 验证手机号码。
在 Python 中安装电话号码库
得益于集成模块,使用 Python 可以轻松
要使用该模块,我们必须先安装它。 使用 pip,我们可以这样做:
pip install phonenumbers
安装模块后,我们可以验证国家代码电话号码。
现在一切都已设置,我们可以探索 Phonenumbers 库。
使用 Python Phonenumbers 库解析电话号码
电话号码几乎肯定是一个字符串,无论输入是来自 Web 表单还是其他来源,例如文本提取(本指南稍后将介绍)。 它需要用电话号码进行解析,然后转换为 PhoneNumber 实例,然后我们才能将其用于验证和其他目的。
导入库
首先,我们需要导入所需的库; 我们将导入电话号码。 我们还需要导入运营商、时区和地理编码器。
示例代码:
import phonenumbers
解析电话号码
借助 parse()
方法,我们可以从电话号码中提取有用的信息,包括以下内容:
示例代码:
import phonenumbers
My_number = "+92333920000"
Parse_number = phonenumbers.parse(My_number)
使用 phonenumbers.parse()
函数时需要电话号码字符串作为输入。 我们可以提供 ISO Alpha-2 格式的国家信息作为额外的可选输入。
例如,请考虑以下代码:
Parse_number = phonenumbers.parse(My_number)
在 ISO Alpha-2 表示法中,RO 表示罗马尼亚。 我们可以使用此页面查找全球每个国家的 Alpha-2 和数字国家代码。
除非必要,否则大多数情况下将省略 ISO Alpha-2 国家/地区代码。
可以使用 phonenumbers.parse()
验证电话号码的长度、前导零和符号等常见问题。 请务必记住,如果不满足任何必需条件,此方法将抛出异常。
始终将其放在我们代码中的 try/catch 块中。
现在我们的电话号码已得到适当处理,我们可以进入验证阶段。
使用 is_possible_number() 方法验证电话号码
可以使用两种方法来验证 Phonenumbers 上的电话号码。 这些方法之间的主要区别在于它们各自的速度和准确性级别。
为了进一步解释这一点,让我们从 is_possible_number()
函数开始。
示例代码:
import phonenumbers
My_number = "+92333920000"
Parse_number = phonenumbers.parse(My_number)
print(phonenumbers.is_possible_number(Parse_number))
输出:
True
该程序将产生一个 True 值作为其输出。
使用 is_valid_number() 方法验证电话号码
现在,我们将使用相同的数字,但这次我们将使用 is_valid_number()
方法检查其有效性:
示例代码:
import phonenumbers
My_number = "+92333920000"
Parse_number = phonenumbers.parse(My_number)
print(phonenumbers.is_valid_number(Parse_number))
输出:
False
即使输入保持不变,输出也会不同。
is_possible_number()
通过检查其长度来猜测电话号码的有效性,而 is_valid_number()
方法检查其长度、前缀和区域。
phonenumbers.is_possible_number()
在遍历大型电话号码列表时比 phonenumbers.is_valid_number()
更快。 如图所示,这些结果并不总是准确的。
快速消除长电话号码很有帮助。 使用有风险。
使用 Geocoder 类中的 description_for_number() 方法查找电话号码位置
电话号码可以揭示有关其所有者的许多详细信息,其中一些可能与我们的研究相关。 由于与电话号码关联的特定运营商是影响产品总成本的一个因素,因此我们可能希望使用各种应用程序编程接口 (API) 或 API 端点。
我们可能希望根据客户所在的时区(电话号码)位置发送促销通知,这样我们就可以避免在半夜向他们发送消息。 这将防止我们不小心唤醒他们。
我们还可以获得有关电话号码位置的信息,以提供与情况相关的信息。 Phonenumbers 库使用户能够访问满足这些要求所需的工具。
我们将使用地理编码器类中可用的 description_for_number()
方法从位置开始。 参数是已解析的电话号码和语言的简称。
让我们用我们之前使用的假号码试试这个。
示例代码:
import phonenumbers
from phonenumbers import geocoder
My_number = phonenumbers.parse("+92333920000")
print("This number is from: "+geocoder.description_for_number(My_number, "en"))
输出:
This number is from: Pakistan
使用运营商类中的 name_for_number() 方法查找电话号码运营商
我们将使用运营商类中的 name_for_number()
方法。
示例代码:
import phonenumbers
from phonenumbers import carrier
My_number = phonenumbers.parse("+92333920000")
print("The carrier of the number is: "+carrier.name_for_number(My_number, "en"))
代码的输出:
The carrier of the number is: Ufone
使用 Python 验证电话号码并获取其他信息
示例代码:
import phonenumbers
from phonenumbers import carrier, timezone, geocoder
my_number = phonenumbers.parse("+92333920000", "GB")
print((phonenumbers.is_valid_number(my_number)))
print("The carrier of the number is: "+carrier.name_for_number(my_number, "en"))
print("The content and the city of the number are:")
print(timezone.time_zones_for_number(my_number))
print("The country this number belongs to is: "+geocoder.description_for_number(my_number, 'en'))
输出:
True
The carrier of the number is: Ufone
The content and the city of the number are:
('Asia/Karachi',)
The country this number belongs to is: Pakistan
这就是我们如何确定一个数字是否有效的方法。 我们在输出中看到 True,这表明 Python 代码中使用的数字是正确的。
我们还可以找出号码的载体。 在我们的例子中,它是 Ufone。
除了运营商,我们还可以找到国家、大陆和城市的名称。
相关文章
使用 Python 将文件上传到 Google 云端硬盘
发布时间:2023/06/15 浏览次数:136 分类:Python
-
This article demonstrates uploading file to Google Drive using Python.
Python 子进程捕获输出
发布时间:2023/06/15 浏览次数:136 分类:Python
-
The main aim of this article is to demonstrate how can the output of a subprocess be captured, stored and shown in Python.
Python 子进程在运行时读取标准输出
发布时间:2023/06/15 浏览次数:127 分类:Python
-
The main aim of this article is to demonstrate how to read the stdout of a subprocess being executed in Python.
使用 Python 获取 CPU 数量
发布时间:2023/06/15 浏览次数:173 分类:Python
-
This tutorial will teach you to determine the number of CPUs using Python.
Python获取CPU温度
发布时间:2023/06/15 浏览次数:111 分类:Python
-
The main aim of this article is to demonstrate how to read and show CPU temperature with the help of the pythonnet library in Python.
Python 从网页中提取表格
发布时间:2023/06/15 浏览次数:50 分类:Python
-
The main aim of this article is to demonstrate how tables can be extracted from a webpage using Pandas and lxml in Python.
Python Antigravity模块的用途
发布时间:2023/06/15 浏览次数:72 分类:Python
-
Python has an unserious, playful side to it. One such is the antigravity module. What is this module all about?
不使用 pip 安装 Python 包
发布时间:2023/06/15 浏览次数:189 分类:Python
-
This article demonstrates how to install a python package without pip in Python.
在代码中安装 Python 模块
发布时间:2023/06/15 浏览次数:72 分类:Python
-
There are more than one way to do things, we want to use this tutorial to learn how to use codes to install Python modules.