Regex 正则表达式以匹配电话号码

Regex 正则表达式以匹配电话号码,regex,Regex,我正试图找到一个正则表达式,它将使以下内容(电话号码)无效 少于10个数字 以+61开头但小于11的数字,不包括“+”号 以+61开头但超过11个数字(不包括“+”号)的数字 以0061开头但小于13的数字 以0061开头但超过13个的数字 以除0061或+61以外的任何其他国家/地区代码开头但小于7的数字 到目前为止,我已经想出了 ^((\+|00)\d{1,3}[- ]?)?\d{10}$ 但是,此操作失败(未捕获以下内容) 以+61开头但超过11个数字(不包括“+”号)的数字 以+

我正试图找到一个正则表达式,它将使以下内容(电话号码)无效

  • 少于10个数字
  • 以+61开头但小于11的数字,不包括“+”号
  • 以+61开头但超过11个数字(不包括“+”号)的数字
  • 以0061开头但小于13的数字
  • 以0061开头但超过13个的数字
  • 以除0061或+61以外的任何其他国家/地区代码开头但小于7的数字
到目前为止,我已经想出了

^((\+|00)\d{1,3}[- ]?)?\d{10}$
但是,此操作失败(未捕获以下内容)

  • 以+61开头但超过11个数字(不包括“+”号)的数字
  • 以+61开头但超过11个数字(不包括“+”号)的数字

如果您的电话号码不能包含空格(如您的正则表达式所示),回溯似乎是您的问题

考虑正则表达式的这一部分:
(\d{1,3}[-]?)?\d

这里的内容是可选的破折号/空格字符串。如果这两个数字不匹配,您将得到一个连续数字列表。当引擎想要找到匹配时,它将把国家代码的一部分视为电话号码,反之亦然。 示例(空格用于区分):
+123456789012
也可以写成
+123456789012
。根据您的正则表达式,两者都将匹配,但您可能只想获得第一个电话号码的匹配

更新1

此正则表达式根据您的标准列表验证电话号码:

^((?:\+61[-]?\d{9}0061[-]?\d{9})|(?:\+}00)(?!(61))\d{1,6})$

它基本上有两个部分:

  • (?:\+61[-]?\d{9}0061[-]?\d{9})
    验证点1,2,3,4,5
  • (?:\+\12400)(?!(61))\d{1,6})
    验证第6点
请记住,整数的长度取决于长度


示例:

如果您的电话号码不能包含空格(如您的正则表达式所示),回溯似乎是您的问题

考虑正则表达式的这一部分:
(\d{1,3}[-]?)?\d

这里的内容是可选的破折号/空格字符串。如果这两个数字不匹配,您将得到一个连续数字列表。当引擎想要找到匹配时,它将把国家代码的一部分视为电话号码,反之亦然。 示例(空格用于区分):
+123456789012
也可以写成
+123456789012
。根据您的正则表达式,两者都将匹配,但您可能只想获得第一个电话号码的匹配

更新1

此正则表达式根据您的标准列表验证电话号码:

^((?:\+61[-]?\d{9}0061[-]?\d{9})|(?:\+}00)(?!(61))\d{1,6})$

它基本上有两个部分:

  • (?:\+61[-]?\d{9}0061[-]?\d{9})
    验证点1,2,3,4,5
  • (?:\+\12400)(?!(61))\d{1,6})
    验证第6点
请记住,整数的长度取决于长度


示例:

为什么投反对票?问题很清楚,他们已经展示了他们的尝试和遇到的问题。为什么其他国家只有7位数字?你用哪种编程语言?询问,因为他们的regexpr可能有细微差异。@tmpdev来自布里斯韦加斯的问候。你能帮我建立一组测试字符串(电话号码)来充分隔离你想要匹配/不匹配的内容吗?我从这里开始:我仍然在相当多的不确定性中运作。请在此基础上编辑您的问题,以便我们能够达成解决方案。为什么要投反对票?问题很清楚,他们已经展示了他们的尝试和遇到的问题。为什么其他国家只有7位数字?你用哪种编程语言?询问,因为他们的regexpr可能有细微差异。@tmpdev来自布里斯韦加斯的问候。你能帮我建立一组测试字符串(电话号码)来充分隔离你想要匹配/不匹配的内容吗?我从这里开始:我仍然在相当多的不确定性中运作。请在此基础上编辑您的问题,以便我们能够找到解决方案。实际上,您给出的表达式与以下+61424323547+不匹配,它也与以下+614245456435匹配,但它不应该匹配。实际上,您给出的表达式与以下+61424323547+不匹配,它也与以下+61424323547+匹配+6142456435,它不应该这样做。