我需要一个只验证英国手机号码的正则表达式。
英国手机号码可以在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)
这不符合我的规则;有人可以帮忙吗?
答案 0 :(得分:8)
如果我理解正确,以下正则表达式似乎符合您的要求。
不允许使用+符号非常简单,因为您只创建了一个值的白名单,并且加号不在其中。
^(07[\d]{8,12}|447[\d]{7,11})$
正如本回答的评论中所提到的,这里不需要方括号。我把它们包括在内,让我对这个正则表达式的阅读更加容易。但是,以下也适用:
^(07\d{8,12}|447\d{7,11})$