从string中提取数字

我想从包含数字和字母的string中提取数字,如:

"In My Cart : 11 items" 

我想在这里得到数字11或任何其他号码。

 $str = 'In My Cart : 11 12 items'; preg_match_all('!\d+!', $str, $matches); print_r($matches); 

如果你只是想过滤除了数字以外的所有东西,最简单的方法就是使用filter_var :

 $str = 'In My Cart : 11 items'; $int = filter_var($str, FILTER_SANITIZE_NUMBER_INT); 
 preg_replace('/[^0-9]/', '', $string); 

这应该做得更好的工作..!

使用preg_replace

 $str = '(111) 111-1111'; $str = preg_replace('/\D/', '', $str); echo $str; 

输出:1111111111

对于浮动数字,

 preg_match_all('!\d+\.*\d*!', $string ,$match); 

我不拥有这个功劳,但我只是要分享它。 这个正则expression式将从string中获得数字,包括小数点/位置以及逗号:

/((?:[0-9]+,)*[0-9]+(?:\.[0-9]+)?)/

引自:
PHP的 – 正则expression式 – 如何从string(如1,120.01)提取十进制数(点和逗号)的数字?

你可以使用preg_match :

 $s = "In My Cart : 11 items"; preg_match("|\d+|", $s, $m); var_dump($m); 

使用preg_replace

 $str = 'In My Cart : 11 12 items'; $str = preg_replace('/\D/', '', $str); echo $str; 

您可以使用以下function:

 function extract_numbers($string) { preg_match_all('/([\d]+)/', $string, $match); return $match[0]; } 
 preg_match_all('!\d+!', $some_string, $matches); $string_of_numbers = implode(' ', $matches[0]); 

在这个特定情况下implode中的第一个参数是“用单个空格分隔匹配[0]中的每个元素”。 在第一个数字之前或最后一个数字之后,Implode不会放置空格(或任何第一个参数)。

还有一些值得注意的是$ matches [0]是存储匹配数组(匹配这个正则expression式)的地方。

要进一步说明数组中的其他索引,请参阅: http : //php.net/manual/en/function.preg-match-all.php

试试这个,用preg_replace

 $string = "Hello! 123 test this? 456. done? 100%"; $int = intval(preg_replace('/[^0-9]+/', '', $string), 10); echo $int; 

DEMO

在PHP中使用这个函数来提取任意数量的一个string

 /** * Return the all number in a array * @param {string} $string * * @return {array} */ function number_in_string($string){ try { if (!is_string($string)) throw new Exception("Error : Param Type"); preg_match_all("/\d+/", $string, $matches); // Return the all coincidences return $matches[0]; } catch (Exception $e) { echo $e->getMessage(); } } 

调用函数

 $numbers = number_in_string("a-25-65_52"); 

复制

 array(3) { [0]=> string(2) "25" [1]=> string(2) "65" [2]=> string(2) "52" } 

打印回显数组的一个元素,对于这个例子

 echo $numbers[0]; // 25 echo $numbers[1]; // 65 echo $numbers[2]; // 52 

其他方式(甚至Unicodestring):

 $res = array(); $str = 'test 1234 555 2.7 string ..... 2.2 3.3'; $str = preg_replace("/[^0-9\.]/", " ", $str); $str = trim(preg_replace('/\s+/u', ' ', $str)); $arr = explode(' ', $str); for ($i = 0; $i < count($arr); $i++) { if (is_numeric($arr[$i])) { $res[] = $arr[$i]; } } print_r($res); //Array ( [0] => 1234 [1] => 555 [2] => 2.7 [3] => 2.2 [4] => 3.3 ) 

根据您的使用情况,这也可能是一个select:

 $str = 'In My Cart : 11 items'; $num = ''; for ($i = 0; $i < strlen($str); $i++) { if (is_numeric($str[$i])) { $num .= $str[$i]; } } echo $num; // 11 

虽然我同意一个正则expression式或filter_var()在这种情况下会更有用。

对于utf8 str:

 function unicodeStrDigits($str) { $arr = array(); $sub = ''; for ($i = 0; $i < strlen($str); $i++) { if (is_numeric($str[$i])) { $sub .= $str[$i]; continue; } else { if ($sub) { array_push($arr, $sub); $sub = ''; } } } if ($sub) { array_push($arr, $sub); } return $arr; }