6

我正在尝试验证手机号码,以下是我到目前为止所做的,但它似乎不起作用。

当传递的值看起来不像手机号码时,我需要它来引发验证错误。手机号码的长度可以是 10 到 14 位,以 0 或 7 开头,并且可以添加 44 或 +44。

def validate_mobile(value):
    """ Raise a ValidationError if the value looks like a mobile telephone number.
    """
    rule = re.compile(r'/^[0-9]{10,14}$/')

    if not rule.search(value):
        msg = u"Invalid mobile number."
        raise ValidationError(msg)
4

6 回答 6

20

我建议使用phonenumbers包,它是 Google 的 libphonenumber 的 python 端口,现在包括移动运营商的数据集:

import phonenumbers
from phonenumbers import carrier
from phonenumbers.phonenumberutil import number_type

number = "+49 176 1234 5678"
carrier._is_mobile(number_type(phonenumbers.parse(number)))

如果 number 是手机号码,这将返回 True,否则返回 False。请注意,该号码必须是有效的国际号码,否则将引发异常。您还可以使用电话号码来解析给定区域提示的电话号码。

于 2014-02-06T16:22:12.990 回答
9

以下正则表达式符合您的描述

r'^(?:\+?44)?[07]\d{9,13}$'
于 2013-04-21T19:11:08.567 回答
3

我会尝试类似的东西:

re.compile(r'^\+?(44)?(0|7)\d{9,13}$')

不过,您可能希望首先删除所有空格、连字符或括号。

于 2013-04-21T19:09:31.257 回答
2

这些不会根据需要验证 +44 号码。关注 更新:约翰布朗的链接并尝试这样的事情:

def validate_not_mobile(value):

    rule = re.compile(r'(^[+0-9]{1,3})*([0-9]{10,11}$)')

    if rule.search(value):
        msg = u"You cannot add mobile numbers."
        raise ValidationError(msg)
于 2013-04-21T20:00:19.990 回答
0
import phonenumbers
from phonenumbers import carrier, timezone, geocoder
from phonenumbers.phonenumberutil import number_type

number = "+911234567890"
print(carrier._is_mobile(number_type(phonenumbers.parse(number))))
print(phonenumbers.parse("+911234567890"))

my_number = phonenumbers.parse("+911234567890")
print(carrier.name_for_number(my_number, "en"))

print(timezone.time_zones_for_number(my_number))

print(geocoder.description_for_number(my_number, "en"))

print(phonenumbers.is_valid_number(my_number))
print(phonenumbers.is_possible_number(my_number))

原因是 is_possible_number() 方法通过检查解析号码的长度来快速猜测电话号码的有效性,而 is_valid_number() 方法通过检查长度、电话号码前缀和区域来运行完整的验证。

于 2021-11-05T06:26:52.180 回答
-1

用于sololearn的Python验证手机号码

str = input()
import re
if len(str)==8:
   pattern=r"[981][^.......$]"  
   match = re.match(pattern,str) 
   if match: 
      print("Valid")
   else:
      print("Invalid")
else:
   print("Invalid")
于 2021-01-07T08:46:18.380 回答