Bri*_*n G 153 c# string formatting phone-number
我有一个字符串"1112224444"它是一个电话号码.我想格式化为111-222-4444,然后将其存储在一个文件中.它在数据线上,我宁愿能够在不指定新的情况下执行此操作变量.
我刚在想:
String.Format("{0:###-###-####}", i["MyPhone"].ToString() );
Run Code Online (Sandbox Code Playgroud)
但这似乎没有成功.
**更新**
好.我选择了这个解决方案
Convert.ToInt64(i["Customer Phone"]).ToString("###-###-#### ####")
Run Code Online (Sandbox Code Playgroud)
现在,当扩展名小于4位时,它会搞砸.它将填写右边的数字.所以
1112224444 333 becomes
11-221-244 3334
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
Sea*_*ean 193
请注意,此答案适用于数字数据类型(int,long).如果您从字符串开始,则需要先将其转换为数字.另外,请注意您需要验证初始字符串的长度至少为10个字符.
从一个充满示例的好页面:
String.Format("{0:(###) ###-####}", 8005551212);
This will output "(800) 555-1212".
Run Code Online (Sandbox Code Playgroud)
虽然正则表达式可能会更好,但请记住旧的编程引用:
有些人在遇到问题时会想"我知道,我会使用正则表达式."现在他们有两个问题.
--Jamie Zawinski,comp.lang.emacs
Rya*_*eld 164
我更喜欢使用正则表达式:
Regex.Replace("1112224444", @"(\d{3})(\d{3})(\d{4})", "$1-$2-$3");
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 43
你需要将它分解为子串.虽然你可以在没有任何额外变量的情况下做到这一点,但它并不是特别好.这是一个潜在的解决方案:
string phone = i["MyPhone"].ToString();
string area = phone.Substring(0, 3);
string major = phone.Substring(3, 3);
string minor = phone.Substring(6);
string formatted = string.Format("{0}-{1}-{2}", area, major, minor);
Run Code Online (Sandbox Code Playgroud)
Jer*_*xon 23
我建议这是美国数字的清洁解决方案.
public static string PhoneNumber(string value)
{
value = new System.Text.RegularExpressions.Regex(@"\D")
.Replace(value, string.Empty);
value = value.TrimStart('1');
if (value.Length == 7)
return Convert.ToInt64(value).ToString("###-####");
if (value.Length == 10)
return Convert.ToInt64(value).ToString("###-###-####");
if (value.Length > 10)
return Convert.ToInt64(value)
.ToString("###-###-#### " + new String('#', (value.Length - 10)));
return value;
}
Run Code Online (Sandbox Code Playgroud)
mat*_*uma 22
据我所知,你不能用string.Format做到这一点......你必须自己处理这个问题.您可以删除所有非数字字符,然后执行以下操作:
string.Format("({0}) {1}-{2}",
phoneNumber.Substring(0, 3),
phoneNumber.Substring(3, 3),
phoneNumber.Substring(6));
Run Code Online (Sandbox Code Playgroud)
这假定数据已正确输入,您可以使用正则表达式进行验证.
小智 19
这应该工作:
String.Format("{0:(###)###-####}", Convert.ToInt64("1112224444"));
Run Code Online (Sandbox Code Playgroud)
或者在你的情况下:
String.Format("{0:###-###-####}", Convert.ToInt64("1112224444"));
Run Code Online (Sandbox Code Playgroud)
Joe*_*orn 14
如果你能得到i["MyPhone"]
的long
,你可以使用long.ToString()
方法对其进行格式化:
Convert.ToLong(i["MyPhone"]).ToString("###-###-####");
Run Code Online (Sandbox Code Playgroud)
请参阅MSDN页面 数字格式字符串.
小心使用long而不是int:int可能溢出.
static string FormatPhoneNumber( string phoneNumber ) {
if ( String.IsNullOrEmpty(phoneNumber) )
return phoneNumber;
Regex phoneParser = null;
string format = "";
switch( phoneNumber.Length ) {
case 5 :
phoneParser = new Regex(@"(\d{3})(\d{2})");
format = "$1 $2";
break;
case 6 :
phoneParser = new Regex(@"(\d{2})(\d{2})(\d{2})");
format = "$1 $2 $3";
break;
case 7 :
phoneParser = new Regex(@"(\d{3})(\d{2})(\d{2})");
format = "$1 $2 $3";
break;
case 8 :
phoneParser = new Regex(@"(\d{4})(\d{2})(\d{2})");
format = "$1 $2 $3";
break;
case 9 :
phoneParser = new Regex(@"(\d{4})(\d{3})(\d{2})(\d{2})");
format = "$1 $2 $3 $4";
break;
case 10 :
phoneParser = new Regex(@"(\d{3})(\d{3})(\d{2})(\d{2})");
format = "$1 $2 $3 $4";
break;
case 11 :
phoneParser = new Regex(@"(\d{4})(\d{3})(\d{2})(\d{2})");
format = "$1 $2 $3 $4";
break;
default:
return phoneNumber;
}//switch
return phoneParser.Replace( phoneNumber, format );
}//FormatPhoneNumber
enter code here
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找实时转换的(美国)电话号码.我建议使用这个扩展名.这种方法可以完美地工作,而不会向后填充数字.该String.Format
解决方案似乎向后工作.只需将此扩展名应用于您的字符串.
public static string PhoneNumberFormatter(this string value)
{
value = new Regex(@"\D").Replace(value, string.Empty);
value = value.TrimStart('1');
if (value.Length == 0)
value = string.Empty;
else if (value.Length < 3)
value = string.Format("({0})", value.Substring(0, value.Length));
else if (value.Length < 7)
value = string.Format("({0}) {1}", value.Substring(0, 3), value.Substring(3, value.Length - 3));
else if (value.Length < 11)
value = string.Format("({0}) {1}-{2}", value.Substring(0, 3), value.Substring(3, 3), value.Substring(6));
else if (value.Length > 10)
{
value = value.Remove(value.Length - 1, 1);
value = string.Format("({0}) {1}-{2}", value.Substring(0, 3), value.Substring(3, 3), value.Substring(6));
}
return value;
}
Run Code Online (Sandbox Code Playgroud)
你也可以尝试这个:
public string GetFormattedPhoneNumber(string phone)
{
if (phone != null && phone.Trim().Length == 10)
return string.Format("({0}) {1}-{2}", phone.Substring(0, 3), phone.Substring(3, 3), phone.Substring(6, 4));
return phone;
}
Run Code Online (Sandbox Code Playgroud)
输出:
小智 5
您可能会发现自己处于这样的情况:用户尝试输入区号和主号码块之间带有各种分隔符的电话号码(例如空格、破折号、句号等...),因此您需要删除输入中所有非数字字符,以便您可以对正在使用的输入进行消毒。最简单的方法是使用 RegEx 表达式。
string formattedPhoneNumber = new System.Text.RegularExpressions.Regex(@"\D")
.Replace(originalPhoneNumber, string.Empty);
Run Code Online (Sandbox Code Playgroud)
那么您列出的答案应该适用于大多数情况。
要回答有关分机问题的问题,您可以删除任何超过预期长度 10(对于常规电话号码)的内容,然后使用以下命令将其添加到末尾
formattedPhoneNumber = Convert.ToInt64(formattedPhoneNumber)
.ToString("###-###-#### " + new String('#', (value.Length - 10)));
Run Code Online (Sandbox Code Playgroud)
在执行此操作之前,您需要执行“if”检查以确定输入的长度是否大于 10,如果不大于,则只需使用:
formattedPhoneNumber = Convert.ToInt64(value).ToString("###-###-####");
Run Code Online (Sandbox Code Playgroud)
小智 5
使用字符串插值和新的数组索引/范围
var p = "1234567890";
var formatted = $"({p[0..3]}) {p[3..6]}-{p[6..10]}"
Run Code Online (Sandbox Code Playgroud)
输出:(123) 456-7890
归档时间: |
|
查看次数: |
212167 次 |
最近记录: |