在php中过滤掉字符串中的数字

Ron*_*ero 13 php

假设我有这些文本'x34','150px','650dpi','e3r4t5'...我怎么才能得到数字?我的意思是我想要34,150,650,345而没有任何其他角色.我的意思是将此字符串的数字转换为一个变量.

Tim*_*per 24

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

// $number = (int) $str;
Run Code Online (Sandbox Code Playgroud)


Abh*_*ani 17

很抱歉加入潮流,而不是使用Regex,我建议您使用PHP的内置功能,这可能比Regex更快.

filter_var

过滤器的标志

例如,从给定的字符串中获取数字

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

为了坚持更严格的问题标准,我已经更新了我的答案,以便给出更好的结果.

我添加了str_replace,因为它们是PHP的异常规则的一部分,因此FILTER_SANITIZE_NUMBER_FLOAT或者INT不会从字符串中删除+和标记-字符.

虽然它使滤波器位长,但它现在失败或给你意想不到的结果的机会较少,这将比REGEX更快.

编辑:

1:意识到FILTER_SANITIZE_NUMBER_FLOAT,PHP不会选择性地 剥离这些字符.,eE,因此只需使用纯数字FILTER_SANITIZE_NUMBER_INT

2:如果你的PHP版本小于5.4,那么请使用array('+', '-')而不是短数组语法['+', '-'].


Gum*_*mbo 12

您可以使用正则表达式删除任何不是数字的字符:

preg_replace('/\D/', '', $str)
Run Code Online (Sandbox Code Playgroud)

这里的模式\D描述了任何不是数字的字符(补充\d).


Hai*_*ome 7

如果您使用的是PHP 5.2.X,5.3.x,5.4,请使用PHP FILTER函数.强烈推荐

$mixed_input = "e3r4t5";
$only_numbers = filter_var($mixed_input, FILTER_SANITIZE_NUMBER_INT);
Run Code Online (Sandbox Code Playgroud)

请仔细阅读此链接以了解更多信息