Отфильтровать числа в строке в php

предполагая, что у меня есть эти тексты «x34», «150px», «650dpi», «e3r4t5» … как я могу получить только числа? я имею в виду, что я хочу 34, 150, 650, 345 без какого-либо другого персонажа. Я имею в виду, что числа, которые эта строка имеет в одной переменной.

Solutions Collecting From Web of "Отфильтровать числа в строке в php"

Извините за то, что позже присоединился к группе, вместо использования Regex, я предлагаю вам использовать встроенные функции PHP, которые могут быть быстрее, чем Regex.

filter_var

флаги для фильтров

например, чтобы получить только числа из данной строки

<?php $a = '!ab.c3@j+dk9.0$3e8`~]\]2'; $number = str_replace(['+', '-'], '', filter_var($a, FILTER_SANITIZE_NUMBER_INT)); // Output is 390382 ?> 

Чтобы придерживаться более строгих стандартов для вашего вопроса, я обновил свой ответ, чтобы дать лучший результат.

Я добавил str_replace, поскольку FILTER_SANITIZE_NUMBER_FLOAT или флаг INT не будут FILTER_SANITIZE_NUMBER_FLOAT символы + и - от строки, потому что они являются частью правила исключения PHP.

Хотя он сделал бит фильтра длинным, но теперь он имеет меньше шансов потерпеть неудачу или дать неожиданные результаты, и это будет быстрее, чем REGEX.

Редактировать:

1: Понял, что с FILTER_SANITIZE_NUMBER_FLOAT PHP не будет FILTER_SANITIZE_NUMBER_FLOAT эти символы .,eE , следовательно, чтобы получить только чистые числа, используйте FILTER_SANITIZE_NUMBER_INT

2: Если у вас версия PHP менее 5.4 , то любезно используйте array('+', '-') вместо синтаксиса коротких массивов ['+', '-'] .

 $str = "e3r4t5"; $str_numbers_only = preg_replace("/[^\d]/", "", $str); // $number = (int) $str; 

Вы можете использовать регулярное выражение для удаления любого символа, который не является цифрой:

 preg_replace('/\D/', '', $str) 

Здесь шаблон \D описывает любой символ, который не является цифрой (дополнение к \d ).

Используйте функции PHP FILTER, если вы используете PHP 5.2.X, 5.3.x, 5.4. Его очень рекомендуется

 $mixed_input = "e3r4t5"; $only_numbers = filter_var($mixed_input, FILTER_SANITIZE_NUMBER_INT); 

Пройдите по этой ссылке, чтобы узнать больше

Замените все, что не является числом, и используйте это значение.

 $str = "foo1bar2baz3"; $num = intval(preg_replace("/[^0-9]/", "", $str)); 

Вы можете использовать следующую функцию

function extract_numbers ($ string) {

preg_match_all ('/ ([\ d] +) /', $ string, $ match);

return $ match;

}