首页 > 解决方案 > 如何仅计算数字长度正则表达式

问题描述

俄罗斯电话号码有 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

问题是,我如何计算正则表达式中只有数字的长度

标签: regex

解决方案


您可以使用

^(?!(?:\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 次可选-和一个数字
  • $- 字符串结束。

推荐阅读