正则表达式用于澳大利亚电话号码验证

时间:2016-10-12 03:43:58

标签: javascript jquery regex

我尝试使用以下正则表达式进行电话号码验证,但无法正常工作,

^([+61|0](2|4|3|7|8|)){0,2}([ 0-9]|[(]){2,3}([)]|[0-9]){6}([ ])[0-9]{7,20}$

以下是我希望通过验证的示例

+61(02)89876544
+61 2 8986 6544
02 8986 6544
+61289876544
0414 570776 
0414570776
0414 570 776
+61 414 570776
+61 (0)414 570776

也接受下面的字符。 () - +空间

4 个答案:

答案 0 :(得分:18)

这就是电话号码结构。最简单的解决方案是要求用户以特定格式输入或让表单自动格式化。如果你必须使用正则表达式,这就是我提出的:

^(?:\+?(61))? ?(?:\((?=.*\)))?(0?[2-57-8])\)? ?(\d\d(?:[- ](?=\d{3})|(?!\d\d[- ]?\d[- ]))\d\d[- ]?\d[- ]?\d{3})$

捕获组:

  1. 国家/地区代码(可选)
  2. 区域/提供者代码(可选)
  3. 电话号码
  4. 演示:https://regex101.com/r/dkFASs/6

    这就是我过去常用的格式:https://en.wikipedia.org/wiki/Telephone_numbers_in_Australia

    当处理这样一个更大的正则表达式时,我发现最常用的方法是将测试用例粘贴到像regex101.com这样的工具中,然后通过捕获组捕获组(如果可以,则命名它们),直到达到结束。一旦一组不匹配,就改变你已经拥有的东西直到它。

    编辑2019:由于这个问题偶尔会受到关注,我想要注意,如果可能的话,最好使用验证库。我的建议是Google's i18n library for phone numbers。它比正则表达式更强大。

答案 1 :(得分:1)

我会首先从电话号码中删除所有空格,因为更多模式意味着更复杂的正则表达式,然后应用以下内容:

(?:\+?61)?(?:\(0\)[23478]|\(?0?[23478]\)?)\d{8}

据我所知,它有效。

将很快写下解释

答案 2 :(得分:1)

我投票赞成@ 3ocene的回复。但是后来发现与我的情况不太吻合。

这是我的测试用例(并非详尽无遗):

+(61) 455 562 400
+61-455-562-400
+61 455 562 400
+(61)-455-562-400
+(61) 455 562 400
(02) 4371 3164
(02) 4371-3164
02 80268989
03 80268989
04 80268989
05 80268989
433245898
433 245 898
433-245-898
4555-62400
123456
08 54 587 456

123456是负数。

这是我建造的,因此可以帮助这里的人:

(\(+61\)|\+61|\(0[1-9]\)|0[1-9])?( ?-?[0-9]){6,9}

这是Regexer链接:

https://regex101.com/r/eiufOH/2

答案 3 :(得分:0)

试试这个

\b([\+-]?\d{2}|\d{4})\s*\(?\d+\)?\s*(?:\d+\s*)+\b