PHP - 从字符串中删除所有非数字字符

107

我应该如何最好地做到这一点?我应该使用正则表达式还是有其他内置的PHP函数可以使用?

例如,我想要将12 months变成12,将Every 6 months变成6,将1M变成1等。


@mickmackusa 为什么不看一下这个PHP中去除电话号码的括号、空格和连字符的问题?(https://dev59.com/0W435IYBdhLWcg3w-lL2)顺便说一句,我认为这个问题不应该被删除。 - Wiktor Stribiżew
2个回答

238

在这种情况下,您可以使用preg_replace;

$res = preg_replace("/[^0-9]/", "", "Every 6 Months" );
$res 在这种情况下返回6。
如果还想包括小数分隔符或千位分隔符,请参考此示例:
$res = preg_replace("/[^0-9.]/", "", "$ 123.099");

在这种情况下,$res返回"123.099"

将句点作为小数分隔符或千位分隔符:"/[^0-9.]/"

将逗号作为小数分隔符或千位分隔符:"/[^0-9,]/"

将句点和逗号作为小数分隔符和千位分隔符:"/[^0-9,.]/"


谢谢。顺便问一下,能否使用多个分隔符来拆分字符串呢?也就是说,让explode()函数可以使用逗号、分号、冒号等任何一个字符作为分隔符? - b85411
嗯,看这里:https://dev59.com/LG445IYBdhLWcg3wQoEj - pguetschow
10
提供的答案允许字符串保留逗号和句号。但问题要求删除所有非数字字符。这只是一个小修改(不足以被视为编辑,因为只有2个字符),但是应该将删除所有非数字的答案更改为$res = preg_replace("/[^0-9]/", "", "Every 6 Months" ); - Jon
负数存在,那么$res = preg_replace("/[^0-9.-]/", "", "$ -123.099"); - Hernán Eche

76

使用\D来匹配非数字字符。

preg_replace('~\D~', '', $str);

3
也会去掉句号。这也许是一些人想要的。 - Jake
7
它会去除空格和换行符,这正是一些人所需的 :) - ArabianMaiden
4
同时也是最简单的,这正是我正在寻找的。 - user7914556

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接