如何在C#中最快地使用美国电话格式[(XXX) XXX-XXXX]对字符串进行格式化?
我的源格式是一个字符串。
如何在C#中最快地使用美国电话格式[(XXX) XXX-XXXX]对字符串进行格式化?
我的源格式是一个字符串。
String.Format("{0:(###) ###-#### x ###}", double.Parse("1234567890123"))
将得到(123) 456-7890 x 123
string p = "8005551234";
string formatedPhoneNumber = string.Format("({0}) {1}-{2}", p.Substring(0, 3), p.Substring(3, 3), p.Substring(6, 4));
这将接受一个包含十个数字的字符串,格式可以是任何形式,例如"246 1377801"
或者">> Phone:((246)) 13 - 778 - 01 <<"
,并将其格式化为"(246) 137-7801"
:
string formatted = Regex.Replace(
phoneNumber,
@"^\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*$",
"($1$2$3) $4$5$6-$7$8$9$10");
(如果字符串不恰好包含十个数字,则返回原始字符串。)
编辑:
构建字符串的快速方法是使用 StringBuilder。通过将容量设置为最终字符串的确切长度,您将使用相同的字符串缓冲区而无需重新分配,并且 ToString 方法将返回缓冲区本身作为最终字符串。
这假设源字符串仅包含十个数字:
string formatted =
new StringBuilder(14)
.Append('(')
.Append(phoneNumber, 0, 3)
.Append(") ")
.Append(phoneNumber, 3, 3)
.Append('-')
.Append(phoneNumber, 6, 4)
.ToString();
var number = string.Format("({0}) {1}-{2}", oldNumber.Substring(0, 3), oldNumber.Substring(3, 3), oldNumber.Substring(6));
假设您将号码存储为“1234567890”,并且希望其显示为“(123) 456-7890”。
虽然不是最快的方法,但您可以使用扩展方法(请注意,参数必须清除任何先前的电话格式):
public static class StringFormatToWhatever
{
public static string ToPhoneFormat(this string text)
{
string rt = "";
if (text.Length > 0)
{
rt += '(';
int n = 1;
foreach (char c in text)
{
rt += c;
if (n == 3) { rt += ") "; }
else if (n == 6) { rt += "-"; }
n++;
}
}
return rt;
}
}
myString.ToPhoneFormat();
如果您需要,可以根据自己的需求进行修改:
您还可以使用此方法来格式化每个用户输入的字符串。
private void txtPhone_Update()
{
string phone = "";
string phone1 = "";
int index = 0;
phone = txtPhone.Text;
phone1 = "";
for (index = 0; index < phone.Length; index++)
if (char.IsDigit(phone[index]))
{ phone1 += phone[index]; }
{
if (phone1[0] == '1') { phone1 = phone1.Remove(0, 1); }
{
string number = "";
number = string.Format("({0}) {1}-{2}", phone1.Substring(0, 3), phone1.Substring(3, 3), phone1[6..]);
phone1 = number;
}
}
}
catch { }
。你需要解释一下你的代码。 - Enigmativitytry
/catch
是一种可怕的反模式。此外,你引入了某种UI层,当if (condition) { /* do something */ }
更简单时,你有一个if (!condition) {} else { /* do something */ }
。你还有phone1 = phone1 + phone[index]
,而phone1 += phone[index]
会更清晰。为什么要涉及DataBindings
?最后,你允许字符串超过10个字符,然后丢弃额外的字符。 - Enigmativity