美国电话号码的正则表达式

时间:2020-01-16 00:41:54

标签: c# regex

我是regex的新手,为了解决问题,我正在花费大量时间。我需要允许这些模式

NPA-XXX-XXXX
(NPA) XXX-XXXX
NPAXXXXXXX

其中NPA =数字0到9 X也是0到9的任何数字

所以这是有效的

123-456-7890
1234567890
(123) 456-7890

但不是这个

(123)-456-7890   // because there is a dash after closing parenthesis
(123)456-7890    // because there is no space after closing parenthesis
QWE-456-7890  // because there are one or more alpha characters

我用这个

Regex r = new Regex(@"^?\(?\d{3}?\)??-??\(?\d{3}?\)??_??\(?\d{4}?\)??-?$");

来自System.Text.RegularExpressions

与有效值匹配的正则表达式是什么?

1 个答案:

答案 0 :(得分:0)

一种查看方式:

  • 所有数字都以XXX-XXXX结尾,其中-是可选的,因此为d{3}\-?\d{4}
  • 数字以(NPA)NPA-开头,-是可选的,因此\(\d{3}\)(以空格结尾)或\d{3}

由于您可以与(a|b)一起使用“或”部分正则表达式,因此整个正则表达式将变为:

(\(\d{3}\) |\d{3}\-?)\d{3}\-?\d{4}

请注意,\(省略了括号,因此它不是正则表达式语言的一部分,而是您要匹配的实际字符。