如果您只处理 10 位电话号码,甚至更容易:
Regex.Replace(phoneNum, @"(\d{3})(\d{3})(\d{4})", "($1) $2-$3");
只读
如果您只对显示电话号码感兴趣,可以将其设为 HTML 助手,如下所示:
public static MvcHtmlString FormatPhoneNum(this HtmlHelper helper, string phoneNum)
{
//You could strip non-digits here to make it more robust
if (String.IsNullOrEmpty(phoneNum)) return phoneNum;
return new MvcHtmlString(Regex.Replace(phoneNum, @"(\d{3})(\d{3})(\d{4})", "($1) $2-$3")); //US Phone Number
}
然后像这样使用:
@foreach (var client in Model.Clients)
{
<td>@Html.FormatPhoneNumber(client.TelephoneNumber)</td>
}
编辑
如果您还需要编辑电话号码并希望在编辑器文本框中显示它的格式,您可以在视图模型上创建一个包装器属性来转换电话号码:
public class Client
{
public string TelephoneNumber {get; set;}
//Require 10 digits, each surrounded by any non-digit characters (will strip all non-digits)
[RegularExpression(@"(\D*\d\D*){10}", ErrorMessage = "Please enter a 10 digit phone number")]
public string FormattedPhoneNum
{
get
{
MyHelpers.FormatPhoneNumber(TelephoneNumber);
}
set
{
TelephoneNumber = MyHelpers.StripPhoneNumber(value);
}
}
}
public class MyHelpers
{
public static StripPhoneNumber(string phone)
{
if (phone == null)
return phone;
else
return _nonDigits.Replace(phone, String.Empty);
}
public static string FormatPhoneNumber(string phoneNum)
{
phoneNum = StripPhoneNumber(phoneNum);
if (String.IsNullOrEmpty(phoneNum)) return phoneNum;
return Regex.Replace(phoneNum, @"(\d{3})(\d{3})(\d{4})", "($1) $2-$3"); //US Phone Number
}
}
注意属性上的 RegularExpressionAttribute。它对用户输入采取非常宽松的立场。只要用户在文本框中输入至少 10 位数字即可满足要求,而不管输入的任何其他字符如何。您可能需要根据自己的目的将其设置得更严格。