C# 美国电话号码的正则表达式
我是新加入regex的,为了把它做好,我花了好几个小时。我需要允许这些模式C# 美国电话号码的正则表达式,c#,regex,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 // bec
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
与有效表达式匹配的正则表达式是什么?一种方法:
- 所有数字都以
结尾,其中XXX-XXXX
是可选的,所以这就是-
d{3}-?\d{4}
- 数字以
或(NPA)
开头,其中NPA-
是可选的,所以这是-
(以空格结尾)或\(\d{3}\)
\d{3}
(a | b)
一起使用,因此整个正则表达式变成:
(\(\d{3}\) |\d{3}\-?)\d{3}\-?\d{4}
请注意
\(
转义括号,因此它不被视为正则表达式语言的一部分,而是您想要匹配的实际字符。如果您展示了一些您尝试过的区域,这将对我们有所帮助,以便我们可以帮助对其进行微调。同样,我们可能想知道您正在使用的特定正则表达式库,因为语法可能会有细微的差异。您你应该阅读以了解SO社区对“给我一个正则表达式”问题的看法。然而,我认为你可能在这里得到了不公平的待遇……因为你似乎试图自己解决它。提示:你尝试的一个问题是(
和)
是正则表达式元字符,需要进行转义才能进行字面匹配。“我认为您可能在这里得到了一笔不公平的交易”——我不同意。您似乎已经尝试过了”--一个实际的尝试至少需要一些最小的努力来研究现有的解决方案,但问题中没有证据表明他们确实这样做了。而且在我看来,这个OP的需求不太可能是如此新奇,以至于堆栈溢出上的任何东西都没有任何用处或与这个问题相关。