php 保留数字_php - 从字符串中提取数字

php - 从字符串中提取数字

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

"In My Cart : 11 items"

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

16个解决方案

440 votes

如果您只想过滤除数字以外的所有内容,最简单的方法是使用filter_var:

$str = 'In My Cart : 11 items';

$int = (int) filter_var($str, FILTER_SANITIZE_NUMBER_INT);

Daniel Bøndergaard answered 2019-02-17T17:37:34Z

289 votes

$str = 'In My Cart : 11 12 items';

preg_match_all('!\d+!', $str, $matches);

print_r($matches);

Gaurav answered 2019-02-17T17:37:09Z

228 votes

preg_replace('/[^0-9]/', '', $string);

这应该做得更好..!

Mahipalsinh Ravalji answered 2019-02-17T17:37:58Z

63 votes

使用preg_replace:

$str = '(111) 111-1111';

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

echo $str;

输出:1111111111

Akash Deep answered 2019-02-17T17:38:29Z

18 votes

对于浮点数,

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

请参阅我对更新的正则表达式的评论。

Yash answered 2019-02-17T17:39:01Z

8 votes

我没有这方面的功劳,但我只需要分享它。 这个正则表达式将从字符串中获取数字,包括小数点/位数,以及逗号:

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

引自这里:

php - regex - 如何从字符串中提取带小数(点和逗号)的数字(例如1,120.01)?

mroncetwice answered 2019-02-17T17:39:47Z

7 votes

使用preg_replace

$str = 'In My Cart : 11 12 items';

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

echo $str;

Hariadi answered 2019-02-17T17:40:11Z

6 votes

你可以使用preg_match:

$s = "In My Cart : 11 items";

preg_match("|\d+|", $s, $m);

var_dump($m);

Dmitri Gudkov answered 2019-02-17T17:40:36Z

4 votes

您可以使用以下功能:

function extract_numbers($string)

{

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

return $match[0];

}

Jasmeen answered 2019-02-17T17:41:01Z

2 votes

preg_match_all('!\d+!', $some_string, $matches);

$string_of_numbers = implode(' ', $matches[0]);

在这个特定情况下内爆的第一个参数说“将matches [0]中的每个元素与一个空格分开。” Implode不会在第一个数字之前或最后一个数字之后放置一个空格(或者你的第一个参数是什么)。

需要注意的是$ matches [0]是存储找到的匹配数组(与此正则表达式匹配)的位置。

有关数组中其他索引的详细信息,请参阅:[http://php.net/manual/en/function.preg-match-all.php]

Bradley Kovacs answered 2019-02-17T17:41:40Z

2 votes

试试这个,使用preg_replace

$string = "Hello! 123 test this? 456. done? 100%";

$int = intval(preg_replace('/[^0-9]+/', '', $string), 10);

echo $int;

DEMO

Dave answered 2019-02-17T17:42:07Z

0 votes

如果您不知道该号码是哪种格式? int或floating,然后使用:

$string = '$125.22';

$string2 = '$125';

preg_match_all('/(\d+.?\d+)/',$string,$matches); // $matches[1] = 125.22

preg_match_all('/(\d+.?\d+)/',$string2,$matches); // $matches[1] = 125

Sajjad Hossain Sagor answered 2019-02-17T17:42:32Z

0 votes

此函数还将处理浮点数

$str = "Doughnuts, 4; doughnuts holes, 0.08; glue, 3.4";

$str = preg_replace('/[^0-9\.]/','-', $str);

$str = preg_replace('/(\-+)(\.\.+)/','-', $str);

$str = trim($str, '-');

$arr = explode('-', $str);

Khaldoon Masud answered 2019-02-17T17:42:56Z

-1 votes

其他方式(甚至unicode字符串):

$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 )

Mehrdad answered 2019-02-17T17:43:21Z

-2 votes

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

$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

虽然我同意正则表达式或filter_var()在所述情况下会更有用。

kasimir answered 2019-02-17T17:43:53Z

-2 votes

对于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;

}

Mehrdad answered 2019-02-17T17:44:18Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值