我可以像.NET中的数字一样格式化字符串吗?

Dan*_*ert 4 .net c# formatting

如果我有这样的电话号码

string phone = "6365555796";
Run Code Online (Sandbox Code Playgroud)

我在数据库中只存储数字字符(作为字符串),是否可以输出如下数字:

"636-555-5796"
Run Code Online (Sandbox Code Playgroud)

类似于我使用数字时的情况:

long phone = 6365555796;
string output = phone.ToString("000-000-0000");
Run Code Online (Sandbox Code Playgroud)

我试过搜索,我在网上找到的只是数字格式文件.

我问的原因是因为我认为能够仅在数据库中存储数值并允许使用常量字符串值来指定我的电话号码格式的不同格式是一个有趣的想法.或者我最好使用一个数字吗?

编辑:问题是格式化包含数字的字符串,而不是数字本身.

Est*_*nes 7

我能想到的最好而不必转换为长/数字,所以它适合一行是:

string number = "1234567890";
string formattedNumber = string.Format("{0}-{1}-{2}", number.Substring(0,3), number.Substring(3,3), number.Substring(6));
Run Code Online (Sandbox Code Playgroud)


Dou*_*rch 6

请注意,并非每个人都使用北美3-3-4格式的电话号码.欧洲电话号码最长可达15位,标点符号较大,例如+ 44-XXXX-XXXX-XXXX与44 + XXXX-XXXX-XXXX不同.您也没有考虑可能需要超过30位的PBX和扩展.

军用和无线电话可以有字母字符,这不是你在按键式电话上看到的"2"="ABC".


Joe*_*orn 6

简单版本:

string phone = "6365555796";
Convert.ToInt64(phone).ToString("000-000-0000");
Run Code Online (Sandbox Code Playgroud)

围绕它进行一些验证并将其放在一个很好的方法中:

string FormatPhone(string phone)
{
   /*assume the phone string came from the database, so we already know it's
     only digits.  If this changes in the future a simple RegEx can validate 
     (or correct) the digits requirement. */

   // still want to check the length:
   if (phone.Length != 10) throw new InvalidArgumentException();

  return Convert.ToInt64(phone).ToString("000-000-0000");
}
Run Code Online (Sandbox Code Playgroud)