Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python验证手机号码_Python_Regex_Django - Fatal编程技术网

Python验证手机号码

Python验证手机号码,python,regex,django,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]{1

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

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

我想尝试一下:

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

不过,您可能需要先删除任何空格、连字符或括号。

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

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

这些不会根据需要验证+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)

我建议使用该软件包,它是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。请注意,该号码必须是有效的国际号码,否则将引发异常。您还可以使用解析给定区域提示的phonenumber。

sololearn的Python验证手机号
看看这个例子:你能提供一些有效的例子吗?@Alexey这些答案是无效的吗?它们似乎起作用了。你能解释一下吗?如果我误解了,那会很有帮助的。thanks@User7答案以不同的方式对待你的问题。目前,MikeM的回答更优雅,更准确。我会像MikeM那样用
[07]
替换
(0 | 7)
。此外,它还将与
+0123456789
+7123456789
@User7等手机相匹配。完美的以上内容将验证例如
gobbledegook99999999999999999999999
@User7 MikeM是否正确,我的错。请看他的答案。MikeM,冷静,谢谢你指出错误,但不要生气,我们来这里是为了同一件事。说清楚一点,我不是说这是一个好的手机验证正则表达式,但是它符合问题中移动电话号码的定义。你能提供标准移动电话号码的正则表达式吗?我不建议这样做,因为它在字符串中遇到字母表时不会引发异常。如果它返回fals,这还不够好吗?对我来说,这是迄今为止最好的。根据PEP8,
\u is\u mobile
应该被认为是私有的。但是,
phonenumbers.number\u type可以按原样使用,对于移动电话号码,它似乎返回
1
,对于固定电话号码,它似乎返回
0
。虽然文档很少,但模式
[981][^……$]
和预期输入长度与问题中的要求不匹配。另外,您正在为
str
赋值,这将覆盖内部
str
类型。
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")