Autor Zpráva
aDAm
Profil
Zdravím,
existuje v php nějaká funkce v php která by dokázala filtrovat řetězec zadaný inputem? Bude se zadávat jen číslo ať už s tečkou nebo čárkou ale může se stát že někdo zadá i třeba znaky a to třeba s mezerou mezi čísly nebo bez. Potřebuju nějak ošetřit aby to odstranilo znaky? Nemá někdo nějaký tip jak to ošetřit? Do db pak tento řetězec uložím do typu decimal 10.2
Taps
Profil
aDAm
regulární výrazy
aDAm
Profil
jo nad temi jsem taky premyslel akorat nevim jesli by to slo osetrit na vsechny znaky
Taps
Profil
aDAm
zkus se podívat ještě na http://www.tvorba-webu.cz/php/typy.php to by ti také mohlo pomoci
karbon
Profil *
a co tak funkce floatval?
Str4wberry
Profil
Karbone, ne. Zkus si to třeba s číslem „20,08“ nebo „20 08“.
karbon
Profil *
Str4wberry
Zkus si to třeba s číslem „20,08“ nebo „20 08“.
Omlouvám se. Příště budu lépe číst.
ShiraNai7
Profil
function formatujCislo($vstup){
$vstup=(string)$vstup;
$vystup='';
$delka=strlen($vstup);

  //odfiltrovani neciselnych znaku
  for($x=0; $x<$delka; $x++){
    $znak=substr($vstup, $x, 1);
    if((ord($znak)>47 and ord($znak)<58) or $znak=='.' or $znak==','){
      $vystup.=$znak;
    }
  }
  
  //nahrazeni carek teckama
  $vystup=str_replace(',', '.', $vystup);
  
  //prevod na cislo, navrat
  return (float)$vystup;
  
}
Str4wberry
Profil
Proč tak složitě, ShiraNai7?


ADAme, regulární výrazy budou nejjednodušší:
preg_replace("/[^\d,\.]/", "", $str)
srigi
Profil
nieco by slo vymysliet aj z tohoto kodu, ktory bude IMHO rychlejsi ako startovanie celeho enginu pre regulare
vstup = "12 34.56 65h46 0g88";
echo "<pre>sour: $vstup<br>"; // debug


$vstup = str_replace(array(' ', '\n', '\t', 'g'), '', $vstup);
print_r($vstup); // debug


$vystup = sprintf("%f", $vstup);
echo "<br>out: $vystup";  //debug
Str4wberry
Profil
ktory bude IMHO rychlejsi ako startovanie celeho enginu pre regulare
To dost pochybuji, a proto jsem to zkusil změřit. Srovnatelné. Řešení uvedené mnou bylo spíše (opravdu nepatrně) rychlejší. Navíc je spolehlivější.
aDAm
Profil
pánové díky moc za rady.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0