【问题标题】:What rules would you use to validate an Australian Phone Number?您将使用哪些规则来验证澳大利亚电话号码?
【发布时间】:2010-09-24 06:18:42
【问题描述】:

如何全面验证澳大利亚电话号码?我正在编写的应用程序需要这个。您可以假设它是从澳大利亚境内拨打的。我想使用白名单方法。

到目前为止,这是我的规则(删除任何空格后):-

  1. 以 13 开头,长度为 6 位
  2. 以 1300 开头,长度为 10 位
  3. 以 0 开头(但不是 0011,因为这是国际拨号),长度为 10 位
  4. 以 +61 开头,后跟 9 位数字
  5. 以 (0_) 开头,后跟 8 位数字(其中 _ 是 1-9)

我有什么遗漏的吗?

需要区号,因为当用户处于不同状态时,我们可能会从我们的传真服务器发送传真。

(我不是问如何根据上述规则制作正则表达式,而是询问这些规则是否正确)。

另请参阅:
UK Phone Numbers
US Phone Numbers

【问题讨论】:

  • 如果您不询问如何编程(正则表达式或其他方式,这似乎与本网站无关)
  • 这个维基百科页面可能会有所帮助:http://en.wikipedia.org/wiki/%2B61
  • 那里,为你解决了这个问题。 :-)
  • 从可用性的角度来看,在允许奇怪的其他字符方面要大方。为什么需要平衡括号?如果有人在没有关闭的情况下输错了一个括号,谁在乎!还可以考虑使用破折号或句点来分隔数字组的人。
  • @Andy Dent:我需要实际使用这个号码来发送传真(从传真服务器作为后台作业)。所以,我想尽可能确保输入的数字是好的。

标签: validation phone-number


【解决方案1】:

不久前我做过类似的事情。 unthinkableMayhem 提到的 Wikipedia 页面是一个很好的起点。

一年前,我的规则看起来像这样:

02[3-9]\d{7}  NSW/ACT
03[4-9]\d{7}  VIC/TAS
07[3-9]\d{7}  QLD
08\d{8}       SA/NT/WA

04[\d]{8}     Moblies  04x[123] = Optus,  04x[456] = Voda, 04x[0789] = Telstra

0500[\d]{6}   Find me anywhere server
0550[\d]{6}   VoIP
059[\d]{7}    Enum

13[\d]{4}     Local rate
1300[\d]{6}   Local rate

1800[\d]{6}   Free call

0198[\d]{2}   Data networks (local call anyway I think)
0198[\d]{6}

190[\d]{7}    Premium rate

【讨论】:

  • 是的,我比我更喜欢这个。它看起来很完整。但请注意,并非每个区号的所有第一个数字都是有效的 - 在 SA/NT/WA 中,有效的第一个数字是 8,9,还有一些其他数字。我假设 0055 数字已被完全替换?
  • 通过手机号码可携带性,您不能假设运营商基于手机号码 (04[\d]{8))。
【解决方案2】:

基于之前的一些答案(我将使用正则表达式,因为它更简洁):

  1. 删除所有空格或匹配的 ( ) 对
  2. 如果符合以下条件之一,则返回数字:
    1. 1[38][0-9]{4}
    2. 1300[0-9]{6}
    3. ([(0),(+61)][23478]){0,1}[1-9][0-9]{7}

请注意,有效的区号值为 [23478]。我还假设仍然存在 1800 个数字。我想也可能有 1900 个数字。

此外,000 和 112 是有效的紧急号码:根据您的具体用例,您可能希望明确允许或拒绝这些号码。如果您要存储“这是我的电话号码”,那么您可能希望禁止紧急号码,但对于拨号计划之类的东西,您可能希望允许它们。

【讨论】:

  • 000 是有效号码(紧急服务)
  • 戴尔:说得好,但不是“这是我的电话号码”的有效号码。
  • 如果您是三重 0 服务 :-)。我可以想到许多应用程序是 WHS,其中可能需要显示紧急服务号码 - 它可能是硬编码的,但是......
【解决方案3】:

0011 不是唯一的国际访问代码。例如,通过传真呼叫海外,您应该使用 0015 - 它避免了压缩的语音剪辑效果,这对传真(或数据,如果您碰巧使用调制解调器)不利。我的办公电话数据库在一些国际传真号码上有 0015 前缀。还有其他特殊用途的国际拨号代码。

我仍然看到手机号码写成 (0411) 123 456

【讨论】:

    【解决方案4】:

    如需确定列表,请尝试https://github.com/googlei18n/libphonenumber

    Google 的通用 Java、C++ 和 JavaScript 库,用于解析、格式化、存储和验证国际电话号码。 Java 版本针对在智能手机上运行进行了优化,并且从 4.0 (Ice Cream Sandwich) 开始被 Android 框架使用。

    你可以在这里测试:https://rawgit.com/googlei18n/libphonenumber/master/javascript/i18n/phonenumbers/demo-compiled.html

    这对我的小工作来说太过分了,我概括了我的测试,但是那个库可以让你测试你的规则:)

    【讨论】:

    • 这是一个我已经忘记的老问题了,但我们现在正在使用 libphonenumber
    • sweet :) 觉得值得一提!
    【解决方案5】:

    我也很想删除括号。我仍然会时不时地看到类似“(0212) 34 5678”这样的电话号码。

    008 号码还在使用吗? 1800怎么样?我认为这是一个类似于现在 1300 的有效前缀。

    【讨论】:

      【解决方案6】:

      这可能就是你所追求的:

      http://www.comlaw.gov.au/comlaw%5Cmanagement.nsf/lookupindexpagesbyid/IP200506356?OpenDocument

      1997 年电信编号计划 建立运输服务编号和与提供运输服务有关的号码使用框架,指定与提供运输服务有关的号码,并建立号码分配和可携带性框架。

      这是一份 261 页的简短文档,包含您需要知道的所有内容:)

      【讨论】:

        猜你喜欢
        • 2015-06-04
        • 1970-01-01
        • 2015-07-13
        • 2013-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多