Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Форматирование номера телелефона по маске


Автор: Akella 31.8.2010, 14:51
Есть строки, содержащие номера телефонов: '0507045645' или '7634587' или '380442447815', т.е. строка состоящая из цифр без каких либо символов. Но пользователю нужно показать это всё в удобоваримом формате, соответственно '050-704-56-45' или '763-45-87' или '38-044-244-78-15'
Я пытался использовать маску и функцию Format
Код
result := Format(sMask, [Strings[i]])

Но безрезультатно.

в Strings[i] номер телефона
пробовал маски типа: (999)-000-00-00 или ###-###-##
но функция возвращает просто значение самой маски.

Чтобы не создавать свой лисапед, может уже есть решения в этой области?

Автор: chip_and_dayl 31.8.2010, 15:19
Так ф-ция Формат предназначена для другого http://www.delphisources.ru/pages/faq/faq_delphi_basics/Format.php.html

А по поводу телефона, а если использовать MaskEdit (вродь так компонент называется)!?!

Добавлено через 5 минут и 30 секунд
Хотя нет, MaskEdit не выход

Автор: Данкинг 31.8.2010, 15:31
Я в своё время как раз лисапед изобретал (правда, на фоксе). Т.е. ставил тире (скобки для кода и т.п. )в зависимости от числа цифр в номере.

Автор: Qu1nt 31.8.2010, 16:03
Код

uses
  MaskUtils;

ShowMessage(MaskDoFormatText('(999)-000-00-00', '0507045645 ', ' '));

Велосипедисты smile

Автор: aleksh 31.8.2010, 16:03
может так
Код

result := FormatFloat('###-##-##', strtoint(strings[i]));

Автор: Akella 31.8.2010, 16:56
Цитата(Qu1nt @  31.8.2010,  16:03 Найти цитируемый пост)
uses
  MaskUtils;

 smile век живи, век учись


осталось подобрать правильную маску, ибо (999)-000-00-00 показывает 7значные телефоны криво :(

Добавлено через 21 секунду
Может можно определять кол-во цифр в номере и подставлять маску?

Автор: Qu1nt 31.8.2010, 17:07
Код

program FormatDemo;

{$APPTYPE CONSOLE}

uses
  SysUtils, MaskUtils;

function FormatText(const Value: String): String;
begin
  Result := Trim(FormatMaskText('!00 000 000-00-00;0', Value));
end;

begin
  WriteLn(FormatText('7634587'));
  WriteLn(FormatText('0507045645'));
  WriteLn(FormatText('380442447815'));
  ReadLn;
end.

Автор: Romikgy 31.8.2010, 17:43
а я все по велосипедам)))))))))))))))))))))0
Код

function n2p(sx: string): string;
  var
    zx: string;
 begin
   if Length(sx)>=2 then
   begin

     Result:=copy(sx,Length(sx)-1,2);
     sx:=Copy(sx,1,Length(sx)-2);
     if  Length(sx)>=2 then
     begin
        Result:=copy(sx,Length(sx)-1,2)+'-'+Result;
        sx:=Copy(sx,1,Length(sx)-2);
        if  Length(sx)>=3 then
           begin
              Result:=copy(sx,Length(sx)-2,3)+'-'+Result;
              sx:=Copy(sx,1,Length(sx)-3);
              if  Length(sx)>=3 then
                 begin
                    Result:='('+copy(sx,Length(sx)-2,3)+')-'+Result;
                    sx:=Copy(sx,1,Length(sx)-3);
                    if Length(sx)>0 then
                    Result:=sx+'-'+Result;
                    sx:='';
                 end
                 else
                 begin
                   while Length(sx)<>3 do
                   sx:='0'+sx;
                   Result:='('+sx+')-'+Result;
                   sx:='';
                 end;  ;
           end;
     end;
   end
   else
   Result:=sx;
   if sx<>'' then
   Result:=sx+'-'+Result;
 end;

Автор: Akella 1.9.2010, 09:00
Цитата(Qu1nt @  31.8.2010,  17:07 Найти цитируемый пост)
Trim(FormatMaskText('!00 000 000-00-00;0',

да, пробелы вместо ( и -, и Trim делают своё дело smile
Спасибо!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)