Предполагаю, что у меня есть эти тексты "x34", "150px", "650dpi", "e3r4t5"... как я могу получить только числа? я имею в виду, что я хочу 34, 150, 650, 345 без какого-либо другого персонажа. я имею в виду, что числа, которые эта строка имеет в одной переменной.
Отфильтровать числа в строке в php
Ответ 1
Извините за то, что присоединился к подземелью поздно, вместо использования Regex, я бы предложил вам использовать PHP, встроенный в функции, который может быть быстрее, чем Regex.
например. для получения только чисел из заданной строки
<?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;
}