从正则表达式中删除特殊字符以格式化 phone 数字的问题

Issue in removing a special character from regex to format the phone number

正在努力格式化 .rdl 报告中的 phone 数字。我在报告字段的表达式 属性 中有下面的正则表达式。 来自用户的可能输入 - 720) 352-6511 , +1 (469) 292-4242, 310.614.1316, (310) 468-0516

期望输出 - (303) 233-2345

My regex =System.Text.RegularExpressions.Regex.Replace(IIf(IsNothing(Fields!Contact_Phone.Value), "", Fields!Contact_Phone.Value), "(\d{3})[ -.]*(\d{3})[ -.]*(\d{4})", "() -")

我的输出 - ((303) 233-2345

开头有一个额外的左括号,我厌倦的其他选项不起作用。

谢谢

这是解决此问题的一种非常通用的方法:匹配输入文本中可能的项目之间的任何非数字字符,并捕获输入中看起来必须的三个部分:

^[^\d+]*(?:\+\D*\d+\D+)?(\d{3})\D*(\d{3})\D*(\d{4})\D*$

regex demo详情:

  • ^ - 字符串开头
  • [^\d+]* - 除数字和 +
  • 以外的零个或多个字符
  • (?:\+\D*\d+\D+)? - + 的可选序列,零个或多个非数字,一个或多个数字,一个或多个非数字
  • (\d{3}) - 第 1 组:三位数
  • \D* - 零个或多个非数字
  • (\d{3}) - 第 2 组:三位数
  • \D* - 零个或多个非数字
  • (\d{4}) - 第 3 组:四位数
  • \D* - 零个或多个非数字
  • $ - 字符串结尾。