форматирование данных в php - PullRequest
0 голосов
/ 24 мая 2009

Что мне нужно сделать, это отформатировать данные в переменной, например:

format: xxx-xxx variable: 123456 output: 123-456

Проблема в том, что мне нужно изменить формат, чтобы статическое решение не работало. Мне также нравится иметь возможность изменять размер переменной, например:

format: xxx-xxx variable: 1234 output: 1-234

Все идеи приветствуются! Спасибо за вашу помощь!

Примечание: все переменные будут числами

Редактировать Я должен был четко указать формат, который не всегда будет группироваться из 3, и он может иметь более чем "-" в качестве символа, группы будут непостоянными 1-22- 333-4444 это будет только в группировке 1-5

Ответы [ 3 ]

1 голос
/ 24 мая 2009

Ваша лучшая ставка - preg_replace .

Регулярные выражения требуют некоторого привыкания, но это, вероятно, ваш лучший выбор ...

EDIT:

//initial parsing
$val = preg_replace(
    '/(\d*?)(\d{1,2}?)(\d{1,3}?)(\d{1,4})$/', 
    '${1}-${2}-$[3}-${4}', 
    $inputString
);

//nuke leading dashes
$val - preg_replace('^\-+', '', $val);

Ключ состоит в том, чтобы сделать каждый набор, кроме самого правого, не жадным, что позволяет ориентироваться по шаблону с правой стороны.

0 голосов
/ 24 мая 2009

Если форматируемый ввод всегда целочисленный, вы можете использовать числовой формат и форматировать его как деньги (тысячи и т. Д.) Вот решение, которое принимает любую строку и преобразует ее в желаемый формат:

$split_position = 3;
$my_string      = '';
echo strrev(implode('-',(str_split(strrev($my_string),$split_position))));

input: 1234;     output: 1-234
input: abcdefab; output: ab-cde-fab
input: 1234567   output: 1-234-567
0 голосов
/ 24 мая 2009

Вы можете реализовать шаблон стратегии и получить новые классы форматирования, которые можно менять во время выполнения. Он выглядит сложным, если вы его раньше не видели, но он действительно помогает с ремонтопригодностью и позволяет в любой момент переключать форматер с помощью setFormatter ().

class StyleOne_Formatter implements Formatter
{
    public function format($text)
    {
      return substr($text,0,3).'-'.substr($text,3);
    }
}

class StyleTwo_Formatter implements Formatter
{
    public function format($text)
    {
      return substr($text,0,1).'-'.substr($text,1);
    }
}

Тогда у вас будет свой класс форматирования, который будет выглядеть так:

class NumberFormatter implements Formatter
{

   protected $_formatter = null;

   public function setFormatter(Formatter $formatter)
   {
      $this->_formatter = $formatter;
   }

   public function format($text)
   {
     return $this->_formatter->format($text);
   }
}

Тогда вы можете использовать это так:

 $text = "12345678910";
 $formatter = new NumberFormatter();

 $formatter->setFormatter(new StyleOne_Formatter());
 print $formatter->format($text);
 // Outputs 123-45678910

 $formatter->setFormatter(new StyleTwo_Formatter());
 print $formatter->format($text);
 // Outputs 1-2345678910
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...