Python电话号码验证

这篇Python文章将展示我们如何使用Python的phonenumbers 库来验证电话号码。我们将学习使用Python来验证电话号码,然后根据地区、国家、大陆和运营商的情况来格式化它们。

我们将从一个简单的例子开始,然后转到一个复杂的例子。所以让我们开始吧,让Python验证和格式化电话号码。

在Python中验证电话号码

验证和确认电话号码的正确性可能是非常具有挑战性的。一个电话号码的格式可以根据我们的国家而改变。

即使在同一个国家,也可能有很大的差异。一些国家使用相同的国家代码,而其他国家则使用多个国家代码。

有些国家甚至不止一次地使用同一个国家代码。

谷歌在GitHub上的libphonenumber 存储库中的一个插图表明,美国、加拿大和加勒比海岛屿都使用相同的国际拨号代码+1。

从科索沃使用塞尔维亚、斯洛文尼亚或摩洛哥的国家代码就可以拨打这些电话号码。这些只是识别或验证电话号码时的几个困难。

乍一看,似乎可以用RegEx 来验证电话号码的国家代码。然而,这表明要验证一个国家的代码,我们必须为全球每个国家创建一个独特的RegEx 规则。

此外,移动电话运营商各自都有准则(例如,某些数字只能在特定的数字范围内使用)。我们可以看到,事情有可能很快失去控制,这将使我们自己验证电话号码的输入变得非常困难。

使用Python中的Phonenumbers

我们很幸运,因为一个Python库可以有效地指导我们完成验证过程。这个库来源于谷歌的libphonenumber 库,它也可以用于其他编程语言,如C++、Java和JavaScript。

PythonPhonenumbers 库就是使用这个库创建的。

本文将告诉我们如何使用Python来验证一个手机号码。

在Python中安装Phonenumbers

由于有一个集成模块,用Python验证电话号码变得很容易。这个模块被称为phonenumbers 模块。

为了使用这个模块,我们必须首先安装它。使用pip ,我们可以做到这一点:

pip install phonenumbers

一旦该模块安装完毕,我们就可以验证国家代码的电话号码了。

现在一切都已经设置好了,我们可以探索Phonenumbers 库。

用PythonPhonenumbers 库解析电话号码

电话号码几乎肯定是一个字符串,不管输入是来自网络表单还是其他来源,例如文本提取(本指南后面将介绍)。它需要用电话号码进行解析,然后转换为PhoneNumber 实例,然后我们才能使用它进行验证和其他用途。

导入库

首先,我们需要导入所需的库;我们将导入phonenumbers 。我们还需要导入carrier,timezone, 和geocoder

示例代码:

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 库使用户能够获得满足这些要求的工具。

我们将使用geocoder 类中提供的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

使用Carrier 类中的name_for_number() 方法来寻找电话号码的载体

我们将使用在carrier 类中找到的方法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

与运营商一起,我们可以找到国家、大陆和城市的名称。根据我们使用的号码,该号码来自亚洲,巴基斯坦,以及卡拉奇市。