php biçimlendirme veri

2 Cevap php

Ben mümkün do olması gerekenler şöyle bir değişken formatında veri:

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

Sorun biçimini değiştirmek gerekiyor, bu yüzden statik bir çözüm işe yaramaz. Ben de gibi, değişken boyutunu değiştirmek mümkün olmak ister:

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

Tüm fikirler bekliyoruz! Yardımlarınız için teşekkürler!

Not: değişkenlerin tüm rakamlar olacaktır

Edit Ben onun her zaman 3 gruplama olacak değil biçimine açık olmalıydı, ve sonra daha fazla olabilir "-" bir sembolü olarak, gruplar vefasız 1-22-333-4444 olacak sadece 1-5 gruplama olacak

2 Cevap

En iyi bahis preg_replace.

Düzenli ifadeler alışmak alır, ancak bu muhtemelen en iyi bahis ...

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

Anahtar righ-en çok açgözlü olmayan, sağ kanattan odaklı desen maç için izin hariç, her set yapmaktır.

Sen strategy pattern uygulamak ve çalışma zamanında değiştirilebilen olan yeni biçimlendirme sınıfları olabilir. Eğer daha önce görmedim ama gerçekten sürdürülebilirlik ile yardımcı olur ve istediğiniz zaman setFormatter () ile formatlayıcıyı geçiş sağlayan eğer karmaşık görünüyor.

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

Sonra şöyle olurdu biçimlendirme sınıf olurdu:

class NumberFormatter implements Formatter
{

   protected $_formatter = null;

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

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

Sonra bu gibi kullanabilirsiniz:

 $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