форматирование строки / номера телефона - PullRequest
3 голосов
/ 26 мая 2011

Я хочу отформатировать телефонные номера, используя C #.Формат: (XX) YYY-ZZZZ или (XXX) YYY-ZZZZ.Итак, мне нужно отформатировать правильные семь цифр и оставшиеся две или три для кода города.

{EDIT}

Телефон сохраняется в виде простой строки / VARChar длиной 9 или 10

Пожалуйста, предложите решение.

Спасибо.

Ответы [ 5 ]

2 голосов
/ 26 мая 2011

Если я правильно понял, вам нужна функция, которая получает int и возвращает string с номером телефона в этом формате. Если это так, вы можете сделать что-то вроде:

public string GetPhoneNumber(int number) {
    string n = number.ToString();
    if (n.Length == 9)
        return "(" + n.Substring(0, 2) + ") " + n.Substring(2, 3) + "-" + n.Substring(5, 4);
    else
        return "(" + n.Substring(0, 3) + ") " + n.Substring(3, 3) + "-" + n.Substring(6, 4);
}
1 голос
/ 26 мая 2011

Это будет любая строка, начиная с правой стороны и заканчивая первыми 10 числами, в формате

(? Xxx) xxx-xxxx

.*

1 голос
/ 26 мая 2011

Предполагая, что номер телефона хранится как длинный и состоит из 9 или 10 цифр, вы можете сделать это:

if (number > 999999999L)
{
     return String.Format("{0:(###) ###-####}", number);
}
else
{
     return String.Format("{0:(##) ###-####}", number);
}

Конечно, это работает только в том случае, если номер ровно 9 или 10 цифр.

0 голосов
/ 20 марта 2014
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
0 голосов
/ 26 мая 2011

Номер телефона хранится в виде строки или числового значения. Если оно хранится как целое значение, это следует сделать:

string formattedPhone = rawNumber.ToString( "(#00) 000-0000" ) ;

Если он хранится в виде строки, вам нужно взглянуть на длину и начать ее нарезку, таким образом:

static string FormatAsPhoneNumber( string s )
{
  if ( s == null ) throw new ArgumentNullException() ;
  if ( s.Length > 10 ) throw new ArgumentOutOfRangeException() ;

  StringBuilder sb = new StringBuilder() ;
  int           p  = 0 ;
  int           remaining = s.Length ;

  if ( remaining > 7 )
  {
    int areaCodeLength = remaining - 7 ;

    sb.Append("(").Append(s.Substring(p,areaCodeLength)).Append(") ") ;

    p         += areaCodeLength ;
    remaining -= areaCodeLength ;

  }
  if ( remaining > 4 )
  {
    int exchangeLength = remaining - 4 ;

    sb.Append(s.Substring(p,exchangeLength)).Append("-") ;

    p         += exchangeLength ;
    remaining -= exchangeLength ;

  }

  sb.Append(s.Substring(p) ) ;

  string formatted = sb.ToString() ;
  return formatted ;
}

Результаты:

Raw         Formatted
---------- --------------
1          1
12         12
123        123
1234       1234
12345      1-2345
123456     12-3456
1234567    123-4567
12345678   (1) 234-5678
123456789  (12) 345-6789
1234567890 (123) 456-7890
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...