PHPでのデータ・フォーマット
-
05-09-2019 - |
質問
私が行うことができるように必要なものはそうのように、変数内の形式のデータであります
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
所属していません StackOverflow