2017-05-25 289 views
1

我正在寻找一个正则表达式来接受只有这个数字没有任何其他格式。正则表达式只允许这种格式123-456-7890

123-456-7890 

我试过这个,但也接受差异格式。

Regex regexPhoneNumber = new Regex(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$"); 
+2

\ d {3} - \ d {3} - \ d {4}'有什么问题? – ndn

+0

它看起来像.NET,所以最好避免'\ d'。 –

+0

@WiktorStribiżew,我不知道.NET和'\ d's有问题。你能分享一下吗? – ndn

回答

1

您可以使用

Regex regexPhoneNumber = new Regex(@"\A[0-9]{3}-[0-9]{3}-[0-9]{4}\z"); 

将接受3个数字开头的字符串,然后有-,然后3位数字,-,然后4位数字与字符串的位置尽头。

详细

  • \A - 字符串的开始
  • [0-9]{3} - 3 ASCII数字
  • - - 一个连字符
  • [0-9]{3} - 3位数
  • - - 又一个连字符
  • [0-9]{4} - 4位数字
  • \z - 字符串的最后一个字符(最终的换行符不能跟随,如$ anchor的情况)。

请注意,如果你想使用\d而不是[0-9]缩短模式,仍然匹配ASCII只有数字,传递RegexOptions.ECMAScript选项的正则表达式对象。