可能是重复问题:
用于电话号码验证的全面正则表达式
我有一个未格式化的电话号码(保证为10位数字)和一个未格式化的分机号码(可以为空、空格或任意数量的数字)。 我需要将它们组合成一个“友好”的字符串。 我打算将它们连接起来,然后使用 Regex.Replace 格式化连接。 这是我正在使用的单元测试,以尝试在插入一个正则表达式之前尝试各种正则表达式:
[Test, Ignore("Sandbox, does not test production code")]
public void TestPhoneRegex()
{
string number = "1234567890";
string extension = "";
var formattedContactNumber =
Regex.Replace("{0} x{1}".FormatWith(number, extension),
@"^(\d{3})[ -]?(\d{3})[ -]?(\d{4})( x\d+)?",
@"$1-$2-$3$4");
Debug.WriteLine("{0} x{1}".FormatWith(number, extension));
Debug.WriteLine(formattedContactNumber);
Assert.AreEqual("123-456-7890", formattedContactNumber);
}
期望的格式化字符串是不带"x"和扩展号码的电话号码。然而,最后一个捕获组匹配了带或不带数字的"x",所以我得到的结果是"123-456-7890 x",而不是"123-456-7890"。这是发布前需要解决的最后一点开发问题。能否提供帮助?
(x \d+)?
变成[\sx]*?(\d+)?
- Brad Christie