我想从包含数字和字母的字符串中提取数字:
"In My Cart : 11 items"
我想提取数字 11
。
我想从包含数字和字母的字符串中提取数字:
"In My Cart : 11 items"
我想提取数字 11
。
如果你只想筛选出数字以外的所有内容,最简单的方法是使用 filter_var 函数:
$str = 'In My Cart : 11 items';
$int = (int) filter_var($str, FILTER_SANITIZE_NUMBER_INT);
$str = 'In My Cart : 11 12 items';
preg_match_all('!\d+!', $str, $matches);
print_r($matches);
$newstr = preg_replace('!\d+!', '', $str);
。它将从字符串中删除所有数字。例如:$str = 'In My Cart : 11 12 items';
将输出 In My Cart : items
。 - Aetherpreg_replace("/[^0-9]/","",$string);
或 filter_var($str, FILTER_SANITIZE_NUMBER_INT);
。 - eapofilter_var($str, FILTER_SANITIZE_NUMBER_INT);
提取了数字、加号和减号。而正则表达式只提取了数字! - PATROMOpreg_replace('/[^0-9]/', '', $string);
这应该做得更好!...
500.00
”会打印出50000
。 - ErickBestpreg_replace('/\D/', '', $string);
- Nicholas Ruunupreg_replace('/[^0-9.]/','',$string)
代替,如果您想保留数字中的.
。 - shamaseen使用preg_replace
函数:
$str = '(111) 111-1111';
$str = preg_replace('/\D/', '', $str);
echo $str;
输出:1111111111
+
量词来匹配更长的字符串 / 较少的替换。 - mickmackusa对于浮点数,
preg_match_all('!\d+\.?\d+!', $string ,$match);
感谢您指出错误。@mickmackusa
'!\d*.?\d+!'
。 - Yashpreg_match_all()
是过度的。这最多是对不同问题的正确答案。 - mickmackusa/((?:[0-9]+,)*[0-9]+(?:\.[0-9]+)?)/
引用自此处:echo '<p>'.$m[0].'</p>';
- Pathros$str = 'In My Cart : 11 12 items';
$str = preg_replace('/\D/', '', $str);
echo $str;
+
量词来匹配更长的字符串 / 较少的替换。 - mickmackusa1112
?可能会从中获得什么好处? - mickmackusa$string = "In My Cart : 11 items";
filter_var
— 使用指定的过滤器过滤变量
var_dump(
filter_var($string, FILTER_SANITIZE_NUMBER_INT)
); // string(2) "11"
str_replace
— 将所有出现的搜索字符串替换为替换字符串
var_dump(
str_replace(array('In My Cart : ',' item', 's'),"", $string)
); // string(2) "11"
preg_replace
— 执行正则表达式搜索和替换
var_dump(
preg_replace("/[^0-9]/","",$string)
); // string(2) "11"
str_replace
的简单性导致了速度的提升,但仅适用于有限的用例。
preg_replace
比 str_replace
或 filter_var
更加灵活多样。preg_replace_callback
。preg_replace_callback
可以在一次调用中进行多个替换。
filter_var
在清理选项方面有限制。filter_var($key, FILTER_SANITIZE_NUMBER_INT)
可以解决 invoice_no[0]
转换为 0
的问题。 - Mohamed Raza$value = '25%';
或者
$value = '25.025$';
或者
$value = 'I am numeric 25';
$onlyNumeric = filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
这将仅返回数字值
xxx-yyy-24
,你会得到--24
。你可以使用str_replace(array('+','-'), '', $result)
删除两个符号。 - imclickingmaniacmax(0,filter_var($str, FILTER_SANITIZE_NUMBER_INT))
来替代使用数组和字符串替换。这个方法可以使代码更简洁易懂,并且保持原有功能。 - Eduardabs((int) filter_var($str, FILTER_SANITIZE_NUMBER_INT));
- MECU