0

私ができる必要があるのは、次のようにデータを変数にフォーマットすることです。

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

問題は、フォーマットを変更できる必要があるため、静的なソリ​​ューションが機能しないことです。また、次のように可変サイズを変更できるようにしたいです。

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

注:すべての変数は数値になります

編集私は、常に3のグループ化になるとは限らない形式を明確にすべきでした。記号として「-」を超える場合があり、グループは不定になります。1-22-333-4444グループ化のみになります。 1-5の

4

3 に答える 3

1

あなたの最善の策はpreg_replaceです。

正規表現には多少の慣れが必要ですが、これがおそらく最善の策です...

編集:

//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);

重要なのは、最も右にあるものを除いてすべてのセットを貪欲ではなく、右側に向けられたパターンマッチを可能にすることです。

于 2009-05-23T22:36:07.017 に答える
0

戦略パターンを実装し、実行時に交換可能な新しいフォーマットクラスを作成できます。これまで見たことがない場合は複雑に見えますが、保守性に非常に役立ち、いつでも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
于 2009-05-23T22:38:05.937 に答える
0

フォーマットする入力が常に整数である場合は、number_formatを試して、お金としてフォーマットすることができます(数千など)。これは、任意の文字列を取得して目的のフォーマットに変換するソリューションです。

$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
于 2009-05-23T22:48:20.860 に答える