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

Gra*_*ntU 5 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)
Run Code Online (Sandbox Code Playgroud)

这还没有按照我的规则进行验证; 有人可以帮忙吗?

Bla*_*ble 9

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

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

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

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

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

  • 不,他们不是。因为正则表达式一开始就非常简洁,我发现包含方括号之类的东西有助于提高可读性,这样我就可以轻松地找到逻辑中的错误,而不是在一行正则表达式中节省 4 个字符。@JamesHolderness,不过是个好问题。 (2认同)