【问题标题】:Regex to validate Australian mobile numbers正则表达式验证澳大利亚手机号码
【发布时间】:2012-06-22 11:43:00
【问题描述】:

我整理了这个验证数字的小正则表达式公式,以确保它们是正确的Australian mobile number。我遇到的问题是新的 Telstra 号码不符合标准,因此会引发错误。

它接受的数字格式是

0421813629、0430091460等...

虽然当我们使用 3 位数为 5 或更高的号码时,它似乎会引发错误,而 Telstras 的新号码在该 3 位数位置有 7

/^(?:\+?61|0)4 ?(?:(?:[01] ?[0-9]|2 ?[0-57-9]|3 ?[1-9]|4 ?[7-9]|5 ?[018]) ?[0-9]|3 ?0 ?[0-5])(?: ?[0-9]){5}$/

我认为该错误与 ?[0-57-9]|3

有关

【问题讨论】:

  • 如果您能告诉我们澳大利亚电话号码的格式是什么,那就太好了。
  • @m0skit0 我列举了几个例子,有 10 位数字,总是从 04********开始
  • 那么问题到底是什么?你想要一个正则表达式来做这两个?那是行不通的,因为你不知道它是一个坏号码还是只是一个 telstra 号码
  • 我需要它来验证所有我认为 |3(第 3 个)子集导致的问题,包括在第 3 位数中有 7 的 telstra 的问题

标签: ruby-on-rails regex validation mobile


【解决方案1】:

我只是为你重写了整个事情。正则表达式将编译,但我还没有测试一切。正则表达式仅适用于已清除空格的字符串(因为空格可以是任意的,并且不会改变电话号码的含义)。正则表达式基于 Wikipedia 文章。如果有任何错误,祝你好运,如果他们决定分配备用块,也祝你好运。我通过将正在使用的 10^7、10^6、10^5 和 10^4 数字块组合在一起来编写正则表达式。

/^(?:\+?61|0)4(?:[01]\d{3}|(?:2[1-9]|3[0-57-9]|4[7-9]|5[0-15-9]|6[679]|7[3-8]|8[1478]|9[07-9])\d{2}|(?:20[2-9]|444|52[0-6]|68[3-9]|70[0-7]|79[01]|820|890|91[0-4])\d|(?:200[0-3]|201[01]|8984))\d{4}$/

如果您想让正则表达式可维护,您应该为每个电话公司编写单独的字符串,然后连接字符串并调用RegExp 构造函数从字符串构建正则表达式。也许效率会低一些,但你会在维护它时保持理智。

【讨论】:

  • 这似乎解决了我们数据中存在的麻烦数字的问题。谢谢
  • 请问您如何在 ASP.net 的 Javascript 中应用上述 RegEx?
  • @Fernando68:正则表达式本身对于许多风格都是正确的。但是,我不知道您将使用它们提供任何进一步建议的上下文。我建议您阅读文档以获取示例。
  • @nhahtdh 我在regex101.com 在线测试仪中将上述正则表达式作为 Javascript 进行了测试,但它失败了。只有在 PHP 模式下才有效。例如,测试的号码是 0434999888(不是真正的手机)。
  • @nhahtdh 注意我发现这个正则表达式就足够了 - /^0[0-8]\d{8}$/g 用于 10 位手机号码,但它不检查是否前两个字符是“04”。抱歉,我对 +61 或 061、61 等不感兴趣。只是手机号码
猜你喜欢
  • 2016-12-12
  • 1970-01-01
  • 2012-12-19
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 2013-03-13
相关资源
最近更新 更多