Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

filter_var

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

например. для получения только чисел из заданной строки

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

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

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

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

Edit:

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

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

Ответ 2

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

// $number = (int) $str;

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

function extract_numbers ($ string) {

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

return $match;

}