Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] cena, po przecinku, części dziesietne - preg_match
Forum PHP.pl > Forum > Przedszkole
slawo
Witam, mam taką linijkę:

  1. if (!empty($cena)) {if (!preg_match('/^[0-9]+$/ ', $_POST['cena'])) {echo "Zła wartoć <b>$cena_zl</b> zł.<br>";}}


Jak wpiszę np. 2, 3 czy jakąkolwiek cyfrę nie zwraca błędu. Gdy wartość ceny wygląda tak: 5.5 4.45 to wywala błąd. Jak włączyć części dziesiętne do tej linijki?
Andrzej.W.
  1. if (!empty($cena)) {if (!preg_match('/^[0-9.]+$/ ', $_POST['cena'])) {echo "Zła wartoć <b>$cena_zl</b> zł.<br>";}}


SlimShady
a może
  1. number_format($integer, 2);
wink.gif
slawo
Tu będzie trzeba wymusić format wpisu.
Andrzej.W.
W ten sposób wymusisz format wpisu ceny, pod warunkiem, że $_POST['cena'], będzie przekazywać wartość ceny, a nie wynik jakiegoś działania.
Zależnie od tego, czy chcesz, żeby np. podano cenę w posataci 125,00, czy dopuszczasz np. 125. Wg. mnie w przypadku ceny, powinno się zawsze dawać 2 miejsca po przecinku, bez względu na wartość gr. więc taki kod:
  1. if (!empty($cena)) {if (!preg_match('/^[0-9]+\.[0-9]{2}+$/ ', $_POST['cena'])) {echo "Zła wartoć <b>$cena_zl</b> zł.<br>";}}

Zawsze w formularzu możesz dać placeholder, typu "3253,00", jako podpowiedź.
Pozdrawiam.
slawo
A oto kod, który nie wywali błędu jak ktoś wpisz np wartość 20 (zł), 20.1 (20 zł 10gr) i odrzuci wartości ujemne. Jeszcze o czymś zapomniałem?

  1. $cena = $_POST['cena'];
  2.  
  3. if (!empty($cena)) {
  4.  
  5. if ($cena<'0') {echo "Wartość nie może być ujemna.";}
  6.  
  7. if (!preg_match('/^[0-9]+$/ ', $_POST['cena'])) {
  8.  
  9. if (!preg_match('/^[0-9]+\.[0-9]{1}+$/ ', $_POST['cena'])) {
  10.  
  11. if (!preg_match('/^[0-9]+\.[0-9]{2}+$/ ', $_POST['cena'])) {echo "Zła wartoć <b>$cena_zl</b> zł.<br>";}
  12.  
  13.  
  14. }
  15. }
  16.  
  17.  
  18. }
Andrzej.W.
Ten kod jest bez sensu.

Jeśli chcesz dopuścić zarówno liczby z przecinkeim, jak i bez to:
  1. if(!empty($_POST['cena']))
  2. {
  3. if (!preg_match('/^[0-9]+\.[0-9]{1,2}+$/ ', $_POST['cena']) AND !preg_match('/^[0-9]+$/', $_POST['cena']))
  4. {
  5. echo "Zła wartoć <b>$cena_zl</b> zł.<br>";
  6. }
  7. }


Ustęp o nieujemnych cenach jest niepotrzebny, ponieważ te 2 warunki przepuszczają tylko KROPKĘ i wyłącznie w formacie liczba.liczba, a minusa już nie przepuści..
Robienie osobnych preg_match dla liczb z 1 miejscem po przecinku i z dwoma, też nie ma sensu, bo {1,2} ten zapis dopuszcza zarówno pierwszy, jak i drugi format.
Warunek, który dałeś w 7 linii wykluczył możliwość sprawdzenia liczb, zawierających wartości dziesiętne, gdyż nie dopuszczał liczb z kropką.
Tutaj jest ta tematyka dobrze opisana:
Podstawy wyrażeń regularnych
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.