8

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

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

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

有什么我错过的吗?

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

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

另请参阅:
英国电话号码
美国电话号码

4

6 回答 6

10

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

一年前,我的规则是这样的:

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
于 2008-11-27T01:54:27.480 回答
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 是有效的紧急号码:根据您的具体用例,您可能希望明确允许或拒绝这些号码。如果您要存储“这是我的电话号码”,那么您可能希望禁止紧急号码,但对于拨号计划之类的东西,您可能希望允许它们。

于 2008-11-27T02:00:09.390 回答
1

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

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

于 2008-11-27T01:27:37.287 回答
1

如需最终列表,请尝试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

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

于 2015-11-26T10:06:08.120 回答
0

这可能是你所追求的:

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

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

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

于 2008-11-27T00:05:25.110 回答
0

我也很想删除括号。我仍然偶尔会看到类似“(0212) 34 5678”的电话号码。

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

于 2008-11-26T23:22:23.123 回答