質問

私が行うことができるように必要なものはそうのように、変数内の形式のデータであります

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

問題は、私はとても静的な解決策が機能しない、形式を変更できるようにする必要があります。

:私も同じように、変数のサイズを変更できるようにしたいです
format: xxx-xxx variable: 1234 output: 1-234

すべてのアイデアは大歓迎です!あなたの助けをありがとう!

注:変数のすべてが数字になります。

編集の私は、そのは、常に3のグループ化されようとしていない形式に明らかにされている必要があり、それは、より多くを持っていることが「 - 」の記号として、グループは1-22不定になります-333-4444それだけ1-5のグループになります。

役に立ちましたか?

解決

あなたの最善の策はあるに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);

キーを除いて、すべてのセットを作ることですRIGH、多くても1つの非貪欲、右サイド指向のパターンマッチが可能になります。

他のヒント

あなたは書式設定された入力は、あなたがお金などを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

あなたは戦略パターンを実装し、実行時にスワップに対応して新しい書式クラスを持つことができます時間。あなたが前にそれを見ていない場合、それは複雑に見えますが、それは本当に保守性を助け、あなたはいつでも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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top