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

我试过下面的正则表达式进行电话号码validation但是没有正常工作,

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

以下是我希望通过validation的示例

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

以下字符也可以接受。 () – +空格

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

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

捕获组:

  1. 国家代码(可选)
  2. 区域/提供者代码(可选)
  3. 电话号码

演示: https : //regex101.com/r/dkFASs/6

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

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

试试这个

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

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

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

据我所知,它有效。

稍后会写解释