英国移动电话号码的正则表达式 - Python

时间:2013-05-06 18:48:35

标签: python regex django

我需要一个只验证英国手机号码的正则​​表达式。

英国手机号码可以在10-14位数之间,以07开头,或省略0,以447开头。

重要的是,如果用户添加+44,则应拒绝此项。

所以这些都是有效的:

  

07111111111

     

447111111111

这些都是无效的:

  

4471111111111

     

021929182711

     

00701029182


到目前为止我所拥有的:

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

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

这不符合我的规则;有人可以帮忙吗?

1 个答案:

答案 0 :(得分:8)

如果我理解正确,以下正则表达式似乎符合您的要求。

不允许使用+符号非常简单,因为您只创建了一个值的白名单,并且加号不在其中。

^(07[\d]{8,12}|447[\d]{7,11})$

正如本回答的评论中所提到的,这里不需要方括号。我把它们包括在内,让我对这个正则表达式的阅读更加容易。但是,以下也适用:

^(07\d{8,12}|447\d{7,11})$