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



我需要一个.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-?)?(?d{3})?[-.]?s*d{3}[-.]?s*d{4}

或带有"边界":

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

参见regex演示

正则表达式解释:

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

环视(?<!d)(?!d)只有在整个模式没有用数字括起来的情况下才允许匹配。

最新更新