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

时间:2011-01-29 14:06:14

标签: php

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

6 个答案:

答案 0 :(得分:22)

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

// $number = (int) $str;

答案 1 :(得分:14)

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

filter_var

flags for the filters

e.g。从给定的字符串中获取数字

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

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

我添加了str_replace,因为FILTER_SANITIZE_NUMBER_FLOATINT标志不会从字符串中删除+-个字符,因为它们是PHP的一部分例外规则。

虽然它使过滤器位变长,但它现在失败或给你意想不到的结果的可能性更小,而且这将比REGEX更快。

修改

1:意识到使用FILTER_SANITIZE_NUMBER_FLOAT,PHP不会剥离这些字符可选 .,eE,因此只能得到纯数字请善用FILTER_SANITIZE_NUMBER_INT

2:如果您的PHP版本低于 5.4 ,请使用array('+', '-')代替短数组语法['+', '-']。< / p>

答案 2 :(得分:11)

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

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

此处模式\D描述任何不是数字的字符(\d的补充)。

答案 3 :(得分:6)

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

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

请通过this link了解更多信息

答案 4 :(得分:3)

替换非数字的所有内容并使用该值。

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

答案 5 :(得分:1)

  

您可以使用以下功能

     

function extract_numbers($ string){

     

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

     

返回$ match;

     

}