Validate/extract US Phone numbers with .net regular expression out of mixed character 值

Validate/extract US Phone numbers with .net regular expression out of mixed character value

我需要一个 .net 的正则表达式,它可以从混合字符值中提取 phone 数字,例如以下示例:

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]+$ 看起来非常基本并且工作得很好,但它不适用于 phone 数字可以显示的所有不同方式,如上所示。

我对正则表达式还很陌生,这似乎有很多问题要问,但如果有人能相对容易地做到这一点,我将不胜感激。

您可以使用以下正则表达式来完成:

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

或 "boundaries":

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

regex demo

正则表达式解释:

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

环视 (?<!\d)(?!\d),仅当整个模式未包含数字时才允许匹配。