zakładając, że mam te teksty "x34", "150px", "650dpi", "e3r4t5" ... jak mogę uzyskać tylko liczby? Chodzi mi o to, że chcę 34, 150, 650, 345 bez żadnej innej postaci. Chodzi o to, aby uzyskać liczby, które ten ciąg ma w jednej zmiennej.Odfiltruj liczby w łańcuchu znaków w php
Odpowiedz
Przepraszamy za przystąpienie do zwycięzcy późno, niż przy użyciu regex, proponuję użyć PHP wbudowane funkcje, które mogą być szybciej niż Regex .
np aby uzyskać tylko liczby z podanego ciągu znaków:
<?php
$a = '[email protected]+dk9.0$3e8`~]\]2';
$number = str_replace(['+', '-'], '', filter_var($a, FILTER_SANITIZE_NUMBER_INT));
// Output is 390382
?>
Aby zachować bardziej rygorystyczne standardy dla Twojego pytania, zaktualizowałem swoją odpowiedź, aby uzyskać lepszy wynik.
Dodałem str_replace, jak FILTER_SANITIZE_NUMBER_FLOAT
lub INT
flaga nie obetnie +
i -
znaki z łańcucha, ponieważ są one częścią Wyjątek PHP.
Mimo że filtr ma długą żywotność, ale teraz ma mniejsze szanse na niepowodzenie lub daje nieoczekiwane wyniki, a to będzie szybsze niż REGEX.
Edit:
1: sobie sprawę, że z FILTER_SANITIZE_NUMBER_FLOAT
, PHP nie będzie rozebrać te znaki opcjonalnie.,eE
, stąd dostać tylko czysty numery łaskawie używać FILTER_SANITIZE_NUMBER_INT
2: Jeśli masz wersję PHP mniejszą niż 5.4, użyj zamiast niej krótkiej składni .
Można użyć wyrażenia regularnego usunąć dowolny znak, który nie jest cyfrą:
preg_replace('/\D/', '', $str)
Oto wzór \D
opisuje dowolny znak, który nie jest cyfrą (uzupełnienie \d
).
$str = "e3r4t5";
$str_numbers_only = preg_replace("/[^\d]/", "", $str);
// $number = (int) $str;
Zamień wszystko, co nie jest liczbą, i użyj tej wartości.
$str = "foo1bar2baz3";
$num = intval(preg_replace("/[^0-9]/", "", $str));
Domyślam się, że powyższa odpowiedź jest bardziej skuteczna, biorąc pod uwagę użycie na milionach jednostek. –
Użyj funkcji FILTRA PHP, jeśli używasz PHP 5.2.X, 5.3.x, 5.4. Jest wysoce zalecane
$mixed_input = "e3r4t5";
$only_numbers = filter_var($mixed_input, FILTER_SANITIZE_NUMBER_INT);
Proszę przejść z this link wiedzieć więcej
Zgadzam się, to jest zalecane. Jednak nie może działać zgodnie z oczekiwaniami, jeśli parametr mixed_input zawiera znaki "+" lub "-", ponieważ nie są one filtrowane, nawet w środku ciągu znaków. – Julien
można użyć następujących funkcji
extract_numbers function ($ string) {
preg_match_all ('/ ([\ d] +) /', $ string, $ match);
return $ match;
}
To działa dla mnie :) – Jasmeen
- 1. Ampersand PHP w łańcuchu
- 2. Iteracja znaków w łańcuchu znaków w mysql
- 3. Zastępowanie znaków w łańcuchu
- 4. wywołanie funkcji w łańcuchu znaków
- 5. Odfiltruj klasy elementów w jQuery?
- 6. Zliczanie liczby kropek w ciągu znaków
- 7. Zapętlanie znaków w łańcuchu w VB.NET
- 8. Jak zamienić zmienną w łańcuchu na PHP?
- 9. Jak zamienić duplikaty białych znaków w łańcuchu znaków w Kotlin?
- 10. nazwa wywołania metody zawartej w łańcuchu znaków
- 11. wykryj znaki nie ASCII w łańcuchu znaków
- 12. Interpolacja łańcuchowa z rzeczywistym% w łańcuchu znaków
- 13. Znajdowanie podwójnych spacji w łańcuchu znaków - Python
- 14. Zliczanie liczby znaków w ciągu znaków
- 15. Wynik zapytania SQL w łańcuchu znaków (lub zmiennej)
- 16. Java null char w łańcuchu
- 17. Zmieniając znak liczby w PHP?
- 18. policz elementy w łańcuchu
- 19. Jak interpolować listę w łańcuchu znaków w języku Python?
- 20. Otrzymywanie liczby znaków EditText
- 21. Zastępowanie liczby w ciągu znaków jquery
- 22. Jak wstawić wszystkie liczby w ciągu znaków
- 23. ograniczenie liczby wklejanych znaków w obszarze tekstowym
- 24. Knockout: limit liczby znaków w obserwowalnym polu
- 25. PHP: zastępuje niepoprawne znaki w łańcuchu utf-8 w
- 26. Jak zastąpić zmienną w łańcuchu wartością w php?
- 27. Vim: sourcing oparty na łańcuchu znaków
- 28. Jak zamienić ï ¿½ w łańcuchu
- 29. sed/regex: Jak dopasować "<' or '>" w łańcuchu znaków
- 30. Usuń wszystkie kropki, ale pierwsze w łańcuchu znaków charytatywnych
dokładnie. http://ideone.com/WKtth –
dlaczego nie korzystać z funkcji filtrowania PHP od teraz, co jest zalecane. Poniżej znajduje się moja odpowiedź poniżej: – Haijerome