正在尝试根据表单输入e.164电话号码



我正试图从web表单中输入一个英国手机号码,并使用Python将其清理为E.164格式,然后在将其输入数据库之前对其进行验证。

我想使用的图书馆是";电话号码";到目前为止,我正在试验的代码是:

def Phone():
my_number = '+4407808765066'
clean_phone = phonenumbers.parse(my_number, "GB")
cleaner_phone = phonenumbers.format_number(clean_phone, 
phonenumbers.PhoneNumberFormat.E164)
valid = phonenumbers.is_possible_number(cleaner_phone)
print(cleaner_phone)

只要完成逻辑,我的期望是它应该获取my_number变量的内容,将其格式化为clean_phone变量,然后在将其传递给验证之前将其格式化成E.164标准,并将输出返回给valid。打印语句供我查看输出。

如果我注释掉valid变量行,一切看起来都很正常。一旦我取消注释它,我就会得到一个错误(见下文(。

Traceback (most recent call last):
File "phone_test.py", line 14, in <module>
Phone()
File "phone_test.py", line 10, in Phone
valid = phonenumbers.is_possible_number(cleaner_phone)
File "D:DropboxCoding Projectslearner_driver_appenvlibsite-packagesphonenumbersphonenumberutil.py", line 2257, in is_possible_number      
result = is_possible_number_with_reason(numobj)
File "D:DropboxCoding Projectslearner_driver_appenvlibsite-packagesphonenumbersphonenumberutil.py", line 2358, in is_possible_number_with_reason
return is_possible_number_for_type_with_reason(numobj, PhoneNumberType.UNKNOWN)
File "D:DropboxCoding Projectslearner_driver_appenvlibsite-packagesphonenumbersphonenumberutil.py", line 2393, in is_possible_number_for_type_with_reason
national_number = national_significant_number(numobj)
File "D:DropboxCoding Projectslearner_driver_appenvlibsite-packagesphonenumbersphonenumberutil.py", line 1628, in national_significant_number
if numobj.italian_leading_zero:
AttributeError: 'str' object has no attribute 'italian_leading_zero'

我哪里错了?

您的my_number是类型为str(字符串(的变量,因此是错误的最后一行(。字符串类不知道属性national_number
通过阅读GitHub上的示例,我怀疑您需要先通过parse()函数传递字符串,然后才能使用库中的函数。

def phone_parser():
my_number = '+4407811111111'
number_parsed = phonenumbers.parse(my_number, None)  # this is new
clean_phone = phonenumbers.format_number(number_parsed, 
phonenumbers.PhoneNumberFormat.E164)
return clean_phone

如果CCD_ 10中的CCD_ 9是已知的,则可以用国家代码代替。否则,它会试图弄清楚,但可能会失败。

编辑以解释原始问题中的更多信息:
显然phonenumbers.format_number()返回了一个字符串,因此您必须再次重新解析该数字才能获得类型为phonenumbers.phonenumber.PhoneNumber的对象(您可以使用type(my_object)检查对象的类型(。之后,您的代码将返回True

不能将format_number函数与字符串一起用作参数,它需要一个PhoneNumber对象。

您可以使用parse函数获得一个。

请参阅https://github.com/daviddrysdale/python-phonenumbers/tree/dev/python#example-使用

最新更新