Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Walidator liczb
Forum PHP.pl > Forum > PHP
seth-kk
W jaki sposob sprawdzacie liczby pochodzace z plikow/$_POST/$_GET (podawane jako stringi) itp sa naprawde liczbami ktorych oczekujecie?
czy moze ograniczacie sie tylko do wykozystania wartosci wyplutych przez intval()lub floatval()?
golaod
  1. <?php
  2. (float)$_POST['liczba'];(int)$_POST['liczba'];
  3. ?>

Mi to w zupełności wystarczy
bigZbig
is_numeric
Pawel_W
masz jeszcze is_NaN();
seth-kk
@golaod: rozumiem ze tylko rzutujesz
@bigZbig: is_numeric() nie odroznia liczb calkowitych od zmiennoprzecinkowych co moze byc problemem jesli kolejnym krokiem jest dodanie do bazy
@Pawel_W: is_NaN() nie dziala poprawnie jesli string zaczyna sie od liczby
interesuje mnie jaknajdokladniejsza weryfikacja ale jednoczesnie czytelnosc kodu gdyz nie pisze go tylko dla siebie
jak narazie ranking wyglada tak
  1. <?php
  2. $val==(string)(float) $val
  3. strcmp($val, (float) $val)==0
  4. ?>

jesli ktos uwaza ze przykladam zbyt duza wage do kodu to polecam "zagadke"
  1. <?php
  2. $a^=$b^=$a^=$b;
  3. ?>
golaod
seth-kk podaj jakiś konkretny przykład tej doskonałości.

Zgodnie z bigZbig: is_numeric sprawdzi czy W OGÓLE jest liczbą, a następnie to już od Ciebie zależy, co zrobisz z tą informacją.
Skoro np. wprowadzasz do bazy float, a dostałeś int to robisz tylko number_format.
Jeśli jednak aż TAK bardzo zależy Ci na informacji czy to float czy nie to polecam wyrażenia regularne smile.gif
Crozin
  1. <?php
  2. if($val == (float) $val){
  3.  //jest to FLOAT
  4. }
  5. ?>
seth-kk
@Crozin: jestes pewien?

prosciej jest pokazac problemy jakie niesie porownywania wartosci przez php
  1. <?php
  2. $a = '1.2a';
  3. $b = '1,2a';
  4. var_dump($a==(int)$a) //false
  5. var_dump($b==(int)$b) //true
  6. var_dump($a==(float)$a) //true
  7. var_dump($b==(float)$b) //true
  8. ?>
erix
Cytat
prosciej jest pokazac problemy jakie niesie porownywania wartosci przez php

To nie jest tylko problem PHP, ale wszystkich bibliotek bazujących na C.

float NIGDY się nie porównuje za pomocą operatora równości.
seth-kk
na ogol tak choc php calkiem niezle radzi sobie z reprezentacja liczb zmiennoprzecinkowych
  1. <?php
  2. $a = 0;
  3. while($a<=1)
  4. echo ($a+=.001).'<br />';
  5. ?>

wypada bezblednie
erix
No ok, to nie przysparza problemów, ale ja napisałem o porównywaniu...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.