Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]preg_match kwota 1 280,00 lub 280,00
Forum PHP.pl > Forum > Przedszkole
casperii
Jeżeli chciałbym pobrać kwotę:
283,00 , użył był kodu:

  1. preg_match('/(\d+),(\d*)\ zł/u', $total, $total);


A co jeśli czasami jest kwota 1 (spacja) 283,00 ?
jak użyć poprawnie preg_match ?
SmokAnalog
Zacznijmy od tego, że jeśli pobierasz to z HTML-a, to lepiej użyć do tego parsera DOM i po prostu odczytać tekst wewnątrz określonego węzła.

Ale odpowiadając małpio na Twoje pytanie, wzorzec wyrażenia regularnego dla liczby ze spacjami może być na przykład taki:

  1. $pattern = '\d{1,3}(?: ?\d{3})*,\d{2} zł';


Lub prościej, tolerując spacje gdziekolwiek w liczbie:

  1. $pattern = '\d[0-9 ]*,\d{2} zł';
casperii
Właśnie korzystam z simple_html_dom.
Próbuje pobrać wartość z pewnego diva tylko że liczba tysięczna jest odsunięta od reszty np:

100 zł
1 100 zł

dla kwoty w setkach działa bez problemu :

  1. preg_match('/(\d+),(\d*)\ zł/u', $price, $price);
  2. $price = filter_var($price[1] . '.' . $price[2], FILTER_VALIDATE_FLOAT);
  3. $price = number_format($price, 2, '.', '');


próbowałem skorzystać z twojej podpowiedzi:
  1. preg_match('/(?: ?\d+),(\d*)\ zł/u', $price, $price);


ale z mizernym skutkiem, ponieważ dla kwoty 1 012,20 zł
zwraca mi 20.00

natomiast gdy zrobię tak:
  1. preg_match('/(\d*),(?: ?\d+) zł/u', $price, $price);

kwota 1 012,20 zł zwraca mi 12.00

ktoś ma jakieś pomysły ?
SmokAnalog
No to może spróbuj skorzystać z mojej odpowiedzi używając mojej odpowiedzi? Bo ja tu widzę jakieś Twoje wzorce i to błędne.
casperii
  1. \d[0-9 ]*,\d{2}
  2. \d{1,3}(?: ?\d{3})*,\d{2}


pokazuje 0,00
SmokAnalog
Pewnie coś pokićkałeś po drodze w tej zamianie na float. Może zamiast się bawić w takie zamienianie w tę i we w tę, to po prostu zamień spację na pusty string i przecinek na kropkę? Bo skoro wzorzec się dopasował, to wiadomo już, że liczba ma taką a nie inną postać.
casperii
Zwracam honor:) twój preg_match jest ok, źle wyprintowałem price[0] smile.gif Dziękuje.
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.