4

こんな電話番号だったら

string phone = "6365555796";

データベースに数字のみを(文字列として)保存したものは、次のように数値を出力できますか ?

"636-555-5796"

数字を使用していた場合の方法と同様:

long phone = 6365555796;
string output = phone.ToString("000-000-0000");

検索してみましたが、オンラインで見つけたのは数値形式のドキュメントだけでした。

私が尋ねる理由は、DB に数値のみを格納し、定数文字列値を使用して電話番号のフォーマット方法を指示するさまざまなフォーマットを許可することは興味深いアイデアだと思うからです。それとも、これに数字を使用したほうがよいでしょうか?

編集:問題は、数値自体ではなく、数値を含む文字列をフォーマットすることです。

4

9 に答える 9

7

long/number に変換する必要がなく、1 行に収まるように私が考えることができる最善の方法は次のとおりです。

string number = "1234567890";
string formattedNumber = string.Format("{0}-{1}-{2}", number.Substring(0,3), number.Substring(3,3), number.Substring(6));
于 2008-10-29T16:11:47.773 に答える
6

単純なバージョン:

string phone = "6365555796";
Convert.ToInt64(phone).ToString("000-000-0000");

その周りにいくつかの検証をラップし、それを素晴らしい方法に入れるには:

string FormatPhone(string phone)
{
   /*assume the phone string came from the database, so we already know it's
     only digits.  If this changes in the future a simple RegEx can validate 
     (or correct) the digits requirement. */

   // still want to check the length:
   if (phone.Length != 10) throw new InvalidArgumentException();

  return Convert.ToInt64(phone).ToString("000-000-0000");
}
于 2008-10-29T16:44:29.610 に答える
6

すべての人が北米の 3-3-4 形式の電話番号を使用しているわけではないことに注意してください。ヨーロッパの電話番号は最大 15 桁で、重要な句読点を使用できます。たとえば、+44-XXXX-XXXX-XXXX は 44+XXXX-XXXX-XXXX とは異なります。また、30 桁以上を必要とする可能性がある PBX と内線番号も考慮していません。

軍用および無線電話にはアルファベット文字を使用できますが、これはプッシュホン電話に見られる「2」=「ABC」ではありません。

于 2008-10-29T16:23:46.547 に答える
4

これはうまくいくと思います

string s = string.Format("{0:###-###-####}", ulong.Parse(phone));

さらに、このhttp://blog.stevex.net/index.php/string-formatting-in-csharp/は、.NET での文字列の書式設定に関する優れた投稿です。

明確化のために@swilliamsに感謝します。

于 2008-10-29T16:07:48.827 に答える
1

なぜこのようなことをしないのですか?

string phoneText = "6365555796";
long phoneNum = long.Parse(phoneText);
string output = phoneNum.ToString("000-000-0000");
于 2008-10-29T15:50:54.570 に答える
1

私はいくつかの拡張メソッド アクションが大好きです。

   /// <summary>
   ///   Formats a string of nine digits into a U.S. phone number.
   /// </summary>
   /// <param name="value">
   ///   The string to format as a phone number.
   /// </param>
   /// <returns>
   ///   The numeric string as a U.S. phone number.
   /// </returns>
   public static string
   ToUSPhone (this string value)
   {
      if (value == null)
      {
         return null;
      }

      long  dummy;

      if ((value.Length != 10) ||
         !long.TryParse (
            value,
            NumberStyles.None,
            CultureInfo.CurrentCulture,
            out dummy))
      {
         return value;
      }

      return string.Format (
         CultureInfo.CurrentCulture,
         "{0}-{1}-{2}",
         value.Substring (0, 3),
         value.Substring (3, 3),
         value.Substring (6));
   }
于 2008-10-29T17:23:41.950 に答える
0

もちろん:

Regex.Replace(phone, @"^(\d{3})(\d{3})(\d{4})$", @"$1-$2-$3")

もちろん、今は 2 つの問題があります

于 2008-10-29T21:21:57.507 に答える
0

特定の文字ポイントで文字列を挿入できる可能性があります。ちょっと好き: phone = phone.Insert(3, "-"); phone = phone.Insert(7, "-");

于 2008-10-29T15:52:20.213 に答える
-1

ASP.NET Gridview または別のコントロールで表示する数値の文字列形式を制御するには、表示目的でアイテムをヘルパー クラスでラップできます。

public class PhoneDisplay
{
    long phoneNum;
    public PhoneDisplay(long number)
    {
        phoneNum = number;
    }
    public override string ToString()
    {
        return string.Format("{0:###-###-####}", phoneNum);
    }

}

次に、データまたは表示フィールドを次のように定義します (例):

PhoneDisplay MyPhone = new PhoneDisplay(6365555796);
于 2008-10-29T16:05:03.433 に答える