Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于澳大利亚电话号码验证的正则表达式_Javascript_Jquery_Regex - Fatal编程技术网

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

Javascript 用于澳大利亚电话号码验证的正则表达式,javascript,jquery,regex,Javascript,Jquery,Regex,我尝试在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 以下字符

我尝试在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
以下字符也可以接受。 ()-+空格

试试这个

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

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

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

  • 国家代码(可选)
  • 区域/提供商代码(可选)
  • 电话号码
  • 演示:

    这是我用来确定格式的:

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


    编辑2019:由于这个问题偶尔会引起注意,我想指出,如果可能的话,最好使用验证库。我的建议是。它比正则表达式更加健壮。

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

    (?:\+?61)?(?:\(0\)[23478]|\(?0?[23478]\)?)\d{8}
    
    据我所知,它是有效的


    很快就会写解释

    我对@3ocene的回答投了赞成票。但后来发现与我的情况不太相符

    以下是我的测试用例(非详尽):

    123456是负数

    这是我建造的,所以它对这里的人很有帮助:

    (\(+61\)|\+61|\(0[1-9]\)|0[1-9])?( ?-?[0-9]){6,9}
    
    以下是Regexer链接:


    看起来不错,我还必须设置角色限制最小7最大20你是什么意思?此正则表达式将与可选区号(可选零后跟1、2、3、4、5、7或8)和可选国家代码(可选+然后64)精确匹配8位数字。如果正则表达式不再是空的,那是因为里面有空格或破折号,或者更可能是因为末尾有空格。编辑:我希望你不是说正则表达式长度必须小于20个字符……电话号码长度应该是7到20个字符,并且模式错误在@KRR中显示javascript模式。我已经更新了它,以使用javascript引擎(我应该在前面检查哪一个),并在测试输入列表中包含最长的匹配(共19个字符)。@KRR,这个答案似乎每隔一段时间就会引起一些注意。如果它回答了您的问题,请您将其标记为已接受的答案,或者如果它没有,请详细说明您的问题,以便我能更好地回答它。(或者如果您认为不同的答案更好,请将该答案标记为已接受的答案)不是
    +61吗(02)89876544
    +61(0)414 570776
    无效?如果包含
    +61
    ,您不应该从区号中删除
    0
    (\(+61\)|\+61|\(0[1-9]\)|0[1-9])?( ?-?[0-9]){6,9}