Jeśli mam następujące wartości:
$var1 = AR3,373.31
$var2 = 12.322,11T
Jak mogę utworzyć nową zmienną i ustawić ją jako kopię danych, z której usunięto wszystkie znaki nieliczbowe, z wyjątkiem przecinków i kropek? Powyższe wartości zwróciłyby następujące wyniki:
$var1_copy = 3,373.31
$var2_copy = 12.322,11
Jestem zaskoczony, że nie wspomniano tutaj o zmiennej filter_var , ponieważ jest to tak stare pytanie ...
PHP ma wbudowaną metodę wykonywania tego za pomocą filtrów oczyszczających . W szczególności, jeden do wykorzystania w tej sytuacji jest
FILTER_SANITIZE_NUMBER_FLOAT
zFILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND
flagami. Tak jak to:Warto również zauważyć, że ponieważ jest wbudowany w PHP, jest nieco szybszy niż używanie wyrażenia regularnego z bieżącymi bibliotekami PHP (choć dosłownie w nanosekundach).
źródło
Najprostszy sposób, aby naprawdę usunąć wszystkie znaki nienumeryczne:
\D
reprezentuje „dowolny znak, który nie jest cyfrą dziesiętną”http://php.net/manual/en/regexp.reference.escape.php
źródło
Możesz użyć
filter_var
do usunięcia wszystkich niedozwolonych znaków z wyjątkiem cyfr, kropki i przecinka.FILTER_SANITIZE_NUMBER_FLOAT
Filtr służy do usuwania wszystkich charakter nienumeryczną z łańcucha.FILTER_FLAG_ALLOW_FRACTION
pozwala na separator frakcji" . "
FILTER_FLAG_ALLOW_THOUSAND
pobrania przecinka z ciągu.Kod
Wynik
Aby dowiedzieć się więcej o filtrach filter_var () i Sanitize
źródło
Jeśli żądaniem jest usunięcie wszystkich (i nie tylko jednego) nieliczbowego znaku, być może poprzedni można zapisać w ten sposób w bardzo prosty sposób (ale możesz napisać funkcję, która przekaże łańcuch i sprawi, że zwróci potrzebną wartość bez znaków .. tak czy siak..):
źródło
Jeśli litery są zawsze na początku lub na końcu, możesz po prostu użyć przycinania ... bez wyrażenia regularnego
źródło
Ta sama odpowiedź co w przypadku middaparka, ale usuń rozszerzenie
,.
źródło