我想从一个包含数字和字母的字符串中提取数字,比如:

"In My Cart : 11 items"

我想提取数字11。


当前回答

按照这一步,它将把字符串转换为数字

$value = '$0025.123';
$onlyNumeric = filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
settype($onlyNumeric,"float");

$result=($onlyNumeric+100);
echo $result;

另一种说法是:

$res = preg_replace("/[^0-9.]/", "", "$15645623.095605659");

其他回答

这不是我的功劳,但我必须分享它。这个正则表达式将从字符串中获取数字,包括小数点/位数,以及逗号:

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

引自此处: PHP - regex -如何提取一个数字与十进制(点和逗号)从字符串(例如1,120.01)?

使用preg_replace:

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

输出:1111111111

由于在字符串中只有1个数字值需要隔离,我将支持并个人使用filter_var()和FILTER_SANITIZE_NUMBER_INT。

echo filter_var($string, FILTER_SANITIZE_NUMBER_INT);

一种更古怪的技术是使用带字符掩码的ltrim(),然后将剩余的字符串强制转换为整数,因为只有1个数值,并且在整数之前的唯一字符是字母、冒号或空格。

Demo

$string = "In My Cart : 11 items";
echo (int)ltrim($string, 'A..z: ');
// 11

如果由于某种原因,有多个整数值,而您想获取第一个整数值,那么regex将是一种直接的技术。

Demo

echo preg_match('/\d+/', $string, $m) ? $m[0] : '';

如果需要显式地将数字字符串转换为整数(或浮点数),Sscanf()非常方便。如果整数值可能/未知地出现在字符串的开头,则在扫描输入字符串之前在输入字符串前加上一个非数字字符。下面的技术匹配前导非数字(并在%后面使用*忽略它们),然后匹配第一个出现的数字序列并将返回的子字符串转换为整数。

Demo

var_dump(sscanf(' ' . $string, '%*[^0-9]%d')[0]);

要适应这种技术来提取一个浮点值,只需将d更改为f。有关sscanf()的赋值抑制特性的更多信息(目前没有记录),请参阅本文。

你可以使用preg_match:

$s = "In My Cart : 11 items";
preg_match("|\d+|", $s, $m);
var_dump($m);
preg_match_all('!\d+!', $some_string, $matches);
$string_of_numbers = implode(' ', $matches[0]);

在本例中,implode中的第一个参数表示“用单个空格分隔匹配[0]中的每个元素。”Implode不会在第一个数字之前或最后一个数字之后放置空格(或任何你的第一个参数)。

另外需要注意的是$matches[0]是存储匹配数组(匹配此正则表达式)的地方。

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