178

文字列「1112224444」があります。これは電話番号です。ファイルに保存する前に、111-222-4444 としてフォーマットしたいと考えています。変数。

私が考えていた:

String.Format("{0:###-###-####}", i["MyPhone"].ToString() );

しかし、それはうまくいかないようです。

** アップデート **

Ok。私はこの解決策に行きました

Convert.ToInt64(i["Customer Phone"]).ToString("###-###-#### ####")

内線番号が 4 桁未満の場合、めちゃくちゃになります。右から数字を埋めていきます。それで

1112224444 333  becomes

11-221-244 3334

何か案は?

4

26 に答える 26

213

この回答は数値データ型(int、long)で機能することに注意してください。文字列から始める場合は、最初に文字列を数値に変換する必要があります。また、最初の文字列の長さが10文字以上であることを検証する必要があることを考慮してください。

例でいっぱいの良いページから:

String.Format("{0:(###) ###-####}", 8005551212);

    This will output "(800) 555-1212".

正規表現はさらにうまく機能する可能性がありますが、古いプログラミングの引用を覚えておいてください。

問題に直面したときに、「わかっている、正規表現を使用する」と考える人もいます。今、彼らは2つの問題を抱えています。
--comp.lang.emacsのJamieZawinski

于 2008-10-09T18:39:15.243 に答える
184

私は正規表現を使用することを好みます:

Regex.Replace("1112224444", @"(\d{3})(\d{3})(\d{4})", "$1-$2-$3");
于 2008-10-09T18:36:07.947 に答える
52

それを部分文字列に分割する必要があります。追加の変数なしでそれを行うことはできますが、それは特に良いことではありません。考えられる解決策の1つは次のとおりです。

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);
于 2008-10-09T18:24:34.897 に答える
36

これは、米国の番号のクリーンなソリューションとしてお勧めします。

public static string PhoneNumber(string value)
{ 
    if (string.IsNullOrEmpty(value)) return string.Empty;
    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;
}
于 2011-12-06T16:09:18.487 に答える
27

私の知る限り、string.Formatでこれを行うことはできません...これは自分で処理する必要があります。数字以外の文字をすべて削除して、次のようにすることができます。

string.Format("({0}) {1}-{2}",
     phoneNumber.Substring(0, 3),
     phoneNumber.Substring(3, 3),
     phoneNumber.Substring(6));

これは、データが正しく入力されていることを前提としています。正規表現を使用して検証できます。

于 2008-10-09T18:24:30.933 に答える
20

これはうまくいくはずです:

String.Format("{0:(###)###-####}", Convert.ToInt64("1112224444"));

またはあなたの場合:

String.Format("{0:###-###-####}", Convert.ToInt64("1112224444"));
于 2010-10-05T21:04:48.003 に答える
14

i["MyPhone"]として取得longできる場合は、メソッドを使用しlong.ToString()てフォーマットできます。

Convert.ToLong(i["MyPhone"]).ToString("###-###-####");

数値形式の文字列に関するMSDNページを参照してください。

intではなくlongを使用するように注意してください。intがオーバーフローする可能性があります。

于 2008-10-09T18:26:09.590 に答える
6
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
于 2014-03-20T16:45:06.247 に答える
5

リアルタイムで変換される(米国の)電話番号を探している場合。この拡張機能を使用することをお勧めします。この方法は、数字を逆に埋めることなく完全に機能します。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;
}
于 2016-03-22T22:10:20.273 に答える
4

市外局番と主要な番号ブロックの間にあらゆる種類の区切り文字 (スペース、ダッシュ、ピリオドなど...) を使用して電話番号を入力しようとするユーザーがいる状況に陥る可能性があります。数値ではないすべての文字の入力を削除して、作業中の入力を無菌化できるようにします。これを行う最も簡単な方法は、RegEx 式を使用することです。

string formattedPhoneNumber = new System.Text.RegularExpressions.Regex(@"\D")
    .Replace(originalPhoneNumber, string.Empty);

次に、リストした回答がほとんどの場合に機能するはずです。

内線番号の問題についてあなたが持っていることに答えるために、予想される 10 の長さ (通常の電話番号の場合) よりも長いものはすべて削除し、次を使用して末尾に追加できます。

formattedPhoneNumber = Convert.ToInt64(formattedPhoneNumber)
     .ToString("###-###-#### " + new String('#', (value.Length - 10)));

これを行う前に、入力の長さが10より大きいかどうかを判断するために「if」チェックを行う必要があります。そうでない場合は、次を使用してください。

formattedPhoneNumber = Convert.ToInt64(value).ToString("###-###-####");
于 2017-12-05T16:32:17.427 に答える
3

これを試して

string result;
if ( (!string.IsNullOrEmpty(phoneNumber)) && (phoneNumber.Length >= 10 ) )
    result = string.Format("{0:(###)###-"+new string('#',phoneNumber.Length-6)+"}",
    Convert.ToInt64(phoneNumber)
    );
else
    result = phoneNumber;
return result;

乾杯。

于 2011-10-31T10:15:41.150 に答える
3
Function FormatPhoneNumber(ByVal myNumber As String)
    Dim mynewNumber As String
    mynewNumber = ""
    myNumber = myNumber.Replace("(", "").Replace(")", "").Replace("-", "")
    If myNumber.Length < 10 Then
        mynewNumber = myNumber
    ElseIf myNumber.Length = 10 Then
        mynewNumber = "(" & myNumber.Substring(0, 3) & ") " &
                myNumber.Substring(3, 3) & "-" & myNumber.Substring(6, 3)
    ElseIf myNumber.Length > 10 Then
        mynewNumber = "(" & myNumber.Substring(0, 3) & ") " &
                myNumber.Substring(3, 3) & "-" & myNumber.Substring(6, 3) & " " &
                myNumber.Substring(10)
    End If
    Return mynewNumber
End Function
于 2009-09-15T17:40:05.387 に答える
2

以下は、正規表現を使用しなくても機能します

string primaryContactNumber = !string.IsNullOrEmpty(formData.Profile.Phone) ? String.Format("{0:###-###-####}", long.Parse(formData.Profile.Phone)) : "";

long.Parse を使用しない場合、string.format は機能しません。

于 2015-12-14T18:00:05.523 に答える
2

Match in Regex を使用して分割し、フォーマットされた文字列を match.groups で出力します

Regex regex = new Regex(@"(?<first3chr>\d{3})(?<next3chr>\d{3})(?<next4chr>\d{4})");
Match match = regex.Match(phone);
if (match.Success) return "(" + match.Groups["first3chr"].ToString() + ")" + " " + 
  match.Groups["next3chr"].ToString() + "-" + match.Groups["next4chr"].ToString();
于 2008-11-19T18:32:17.533 に答える
1

C# については、次のリンクを使用してください http://www.beansoftware.com/NET-Tutorials/format-string-phone-number.aspx

フォーマットを行う最も簡単な方法は、正規表現を使用することです。

private string FormatPhoneNumber(string phoneNum)
{
  string phoneFormat = "(###) ###-#### x####";

  Regex regexObj = new Regex(@"[^\d]");
  phoneNum = regexObj.Replace(phoneNum, "");
  if (phoneNum.Length > 0)
  {
    phoneNum = Convert.ToInt64(phoneNum).ToString(phoneFormat);
  }
  return phoneNum;
}

phoneNum を最大 15 文字の文字列 2021231234 として渡します。

FormatPhoneNumber(string phoneNum)

別のアプローチは、サブストリングを使用することです

private string PhoneFormat(string phoneNum)
    {
      int max = 15, min = 10;
      string areaCode = phoneNum.Substring(0, 3);
      string mid = phoneNum.Substring(3, 3);
      string lastFour = phoneNum.Substring(6, 4);
      string extension = phoneNum.Substring(10, phoneNum.Length - min);
      if (phoneNum.Length == min)
      {
        return $"({areaCode}) {mid}-{lastFour}";
      }
      else if (phoneNum.Length > min && phoneNum.Length <= max)
      {
        return $"({areaCode}) {mid}-{lastFour} x{extension}";
      }
      return phoneNum;
    }
于 2018-05-14T20:37:54.960 に答える
1
public string phoneformat(string phnumber)
{
String phone=phnumber;
string countrycode = phone.Substring(0, 3); 
string Areacode = phone.Substring(3, 3); 
string number = phone.Substring(6,phone.Length); 

phnumber="("+countrycode+")" +Areacode+"-" +number ;

return phnumber;
}

出力は次のようになります:001-568-895623

于 2010-09-14T13:21:34.727 に答える
0

拡張機能の問題を処理するには、次の方法はどうですか。

string formatString = "###-###-#### ####";
returnValue = Convert.ToInt64(phoneNumber)
                     .ToString(formatString.Substring(0,phoneNumber.Length+3))
                     .Trim();
于 2010-09-24T21:11:12.790 に答える