使用.net正则表达式从混合字符值中验证/提取美国电话号码

时间:2015-11-05 16:01:34

标签: .net regex phone-number

我需要.net的正则表达式,它可以从混合字符值中提取电话号码,例如以下示例:

  

yyy1-555-555-5555yyy1
  yyy555-555-5555yyy1
  yyy1(555)555-5555yyy1
  yyy5555555555yyy1
  yyy1-(555)-555-5555yyy1
  yyy1(555)-555-5555yyy1
  yyy(555)555-5555yyy1

模式^\+?([0-9]+[ -]?){5,}[0-9]+$看起来非常基本且工作得相当好,但它不能用于如上所示的电话号码的所有不同方式。

我对正则表达式很陌生,这看起来似乎有很多要问,但如果对某人来说相对容易,我会很感激帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式执行此操作:

(?:1-?)?\(?\d{3}\)?[-.]?\s*\d{3}[-.]?\s*\d{4}

或“边界”:

(?<!\d)(?:1-?)?\(?\d{3}\)?[-.]?\s*\d{3}[-.]?\s*\d{4}(?!\d)

请参阅regex demo

正则表达式的解释:

  • (?:1-?)? - 1的可选(1或0)序列和可选的连字符
  • \(?\d{3}\)? - 可选地用(...)
  • 括起来的3位数字序列
  • [-.]? - 可选的分隔符(-.,必要时添加更多内容)
  • \s* - 0个或更多空格(如果您需要排除换行符,请使用\p{Zs}
  • \d{3} - 3位数序列
  • [-.]? - 1或0个分隔符
  • \s* - 0个或更多空格
  • \d{4} - 4位数序列。

如果整个模式没有用数字括起来,那么环顾(?<!\d)(?!\d)只允许匹配。