5

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

英国手机号码可以在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)

根据我的规则,这还没有验证;有人可以帮忙吗?

4

2 回答 2

14

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

不允许 + 号非常容易,因为您只是创建值的白名单,而加号不在其中。

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

正如该答案的评论中所提到的,这里不需要方括号。我将它们包括在内是为了让我自己对这个正则表达式的阅读更容易一些。但是,以下方法也同样有效:

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

于 2013-05-06T18:56:09.447 回答
1

我玩弄了@BlackVegetable 对英国数字模式的回答,这对我有用(07\d{9}|447\d{9})$

请注意,此模式仅适用于长度为 11 位的英国手机号码。

于 2022-01-05T13:01:36.823 回答