【发布时间】:2023-03-21 14:55:01
【问题描述】:
我有一个未格式化的电话号码(保证为 10 位数字)和一个未格式化的分机号(可以是 null、空白或任意数量的数字)。我需要将它们组合成一个“友好”的字符串。我想我会连接它们,然后使用 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?
(x \d+)?变为[\sx]*?(\d+)? -
当你写exception时,你的意思是extension,对吧?
-
为什么要在 连接之后格式化它们?
-
我讨厌这些电话号码格式的东西,因为他们总是假设每个人的号码在相同的模式下都有相同的位数(不!)(不!)
-
@Donal,非常正确,嗯?也许他正在制作一个只适用于北美的应用程序?这里的数字都保证是10位数字(不包括国家代码,包括区号)。