【问题标题】:Regular expression for UK Mobile Number - Python英国手机号码的正则表达式 - Python
【发布时间】:2013-04-30 14:07:42
【问题描述】:

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

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

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

【问题讨论】:

  • 这篇 StackOverflow 帖子可能会有所帮助:stackoverflow.com/questions/6582309/…
  • @user2246087 看起来这是他/她想要验证的英国号码的子集。从这个意义上说,这不是完全重复的。
  • @BlackVegetable 我不是说它是重复的,提到它以供参考。

标签: python regex django


【解决方案1】:

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

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

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

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

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

【讨论】:

  • \d 周围的方括号真的有必要吗?我并不是要吹毛求疵,但我很好奇我是否遗漏了什么。
  • 不,他们不是。因为正则表达式一开始就非常简洁,我发现包含方括号之类的内容有助于提高可读性,这样我就可以轻松地在我的逻辑中找到错误,而不是在一行正则表达式的长度上保存 4 个字符。 @JamesHolderness,很好的问题。
  • 请注意您的正则表达式不可能正确,一次您有前缀 + 8-12 数字,另一次您有前缀 + 7-11 数字。在这两种情况下都应该是 8-12。
  • @mrbrdo 我的印象是,total 数字的数量是 10-14。一种情况下的前缀是两位数,另一种情况下的前缀是 3。因此总数将是 2+(8~12) 和 3+(7~11),两者都等于 10-14。
  • 嗯,我不是来自英国,但我来自欧盟,对我来说,我的号码是例如01 1234567,其中 01 是区号。所以我的号码是 7 个号码,区号是 01。如果我使用国际前缀 - +386 1 - 我的号码仍然是 1234567,它不会神奇地变短,因为我已经更改了前缀。所以它是 +386 1 1234567。它不会像您的正则表达式似乎暗示的那样缩短一个数字。除非英国有一个完全邪恶的电话系统,否则我会认为这对他们来说是一样的。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 2019-06-22
    相关资源
    最近更新 更多