从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; }