我正在尝试使用this answer中提供的解决方案,并且还引用了this article。
基本上,我正在尝试格式化社会安全号码。这是上面链接的文章中使用的方法:
String.Format(“{0:###-##-####}”, 123456789);
如上所示传入数字时效果很好,但我需要格式化的数字包含在字符串中 - 所以我基本上这样做(这不起作用):
String.Format(“{0:###-##-####}”, "123456789");
解决问题的好方法是什么?
答案 0 :(得分:3)
您可以将字符串解析为数字类型,然后使用string.Format
,如:
String.Format("{0:###-##-####}", long.Parse("123456789"));
您还可以根据您的号码使用long.TryParse
或int.TryParse
,然后在string.Format中使用该值。
long number;
string str = "123456789";
if (!long.TryParse(str, out number))
{
//invalid number
}
string formattedStr = String.Format("{0:###-##-####}", number);
答案 1 :(得分:1)
您可以使用Regex.Replace方法
string formatted = Regex.Replace("123456789", @"(.{3})(.{2})(.{4})", "$1-$2-$3");
如果你没有那么多数字(或字母),你可以使用多个点。
string formatted = Regex.Replace("123456789", @"(...)(..)(....)", "$1-$2-$3");
答案 2 :(得分:0)
您可以尝试打印单个字符
string.Format("{0}{1}{2}", "123".ToCharArray().Cast<object>().ToArray())
修改此代码以支持SSN的可变长度(如果有必要 - 在运行时构建格式字符串)。
答案 3 :(得分:0)
SSN通常存储在varchar中。如果是这样,你可以使用这种实用方法。
public static string FormatSSN(string ssn)
{
if (String.IsNullOrEmpty(ssn))
return string.Empty;
if (ssn.Length != 9)
return ssn;
string first3 = ssn.Substring(0, 3);
string middle2 = ssn.Substring(6, 2);
string last4 = ssn.Substring(5, 4);
return string.Format("{0}-{1}-{2}", first3, middle2, last4);
}