Regex 如何只计算长度正则表达式的位数

Regex 如何只计算长度正则表达式的位数,regex,Regex,俄罗斯电话号码有11位数字,但我不能使用a{11},因为电话号码可以包含括号和破折号 我的正则表达式:^([\+]?\d){1,2}([\(\-]*[0-9]{3}[\)\-]*)([0-9\-]{7,9})$ 国家/地区代码中的数字可以包含1到2个字符 然后是带括号或不带括号的3位数字作为电话运营商代码 然后,从7-9位开始,加上破折号或不加破折号 例如: +7(994)849-45-16 +7(994)849-4516 +7(994)84945-16 +7994849-45-16 问题是,

俄罗斯电话号码有11位数字,但我不能使用
a{11}
,因为电话号码可以包含括号和破折号
我的正则表达式:
^([\+]?\d){1,2}([\(\-]*[0-9]{3}[\)\-]*)([0-9\-]{7,9})$

国家/地区代码中的数字可以包含1到2个字符
然后是带括号或不带括号的3位数字作为电话运营商代码
然后,从7-9位开始,加上破折号或不加破折号

例如:

+7(994)849-45-16
+7(994)849-4516
+7(994)84945-16
+7994849-45-16
问题是,我如何在正则表达式中只计算数字的长度

^(?)(?:\D*\D){12})(\+?\D{1,2})([(-*[0-9]{3}[)-]*)([0-9](?:-?[0-9]){6,8})$

详细信息

  • ^
    -字符串的开头
  • (?!(?:\D*\D){12})
    -字符串中不允许超过11位数字
  • (\+?\d{1,2})
    -第1组:可选的
    +
    ,然后是1或2位数字
  • ([(-*[0-9]{3}[)-]*)
    -第2组:零个或多个
    -
    字符,三位,然后再次是零个或多个
    -
    字符
  • ([0-9](?:-?[0-9]){6,8}
    -第3组:一个数字,然后可选的
    -
    和一个数字出现6到8次
  • $
    -字符串结束

[0-9\-]{7,9}
替换为
[0-9](?:-?[0-9]){6,8}
。国家/地区代码部分必须是
\+?\d{1,2}
@WiktorStribiżew它最多计数14位要将总位数限制为11位,请在
^
之后添加
(?!(?:\d*\d){12}