Python验证手机号码

时间:2013-04-21 19:04:47

标签: python regex django

我正在尝试验证手机号码,下面是我到目前为止所做的,但它似乎无效。

当传递的值看起来不像手机号码时,我需要它来提出验证错误。手机号码可以是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)

5 个答案:

答案 0 :(得分:11)

我建议使用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)))

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

答案 1 :(得分:4)

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

r'^(?:\+?44)?[07]\d{9,13}$'

答案 2 :(得分:2)

我会尝试类似的事情:

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

您可能希望先删除任何空格,连字符或圆括号。

答案 3 :(得分:2)

这些不会根据需要验证+44号码。按照更新:John Brown的链接尝试以下内容:

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)

答案 4 :(得分:-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")