我正在尝试验证手机号码,下面是我到目前为止所做的,但它似乎无效。
当传递的值看起来不像手机号码时,我需要它来提出验证错误。手机号码可以是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)
答案 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)
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")