从字符串中删除所有非数字字符;[^0-9]与预期不匹配


Remove all non-numeric characters from a string; [^0-9] doesn't match as expected

我试图从字符串中删除所有内容,但只是数字(0-9)。

我认为这将工作…

echo preg_replace("[^0-9]","",'604-619-5135');

但它回显"604-619-5135"。我错过了什么?

试试这个:

preg_replace('/[^0-9]/', '', '604-619-5135');

preg_replace使用通常以/开始和结束的pcre。

这是为将来的开发者准备的,你也可以试试这个。简单了

echo preg_replace('/'D/', '', '604-619-5135');

您需要用分隔符将模式括起来—通常使用斜杠(/)。试试这个:

echo preg_replace("/[^0-9]/","",'604-619-5135');

注意:如果您正在过滤包含-符号的字符串,则不适用于此答案,因为-代表负号,不会被过滤和删除。(如-2,-4等)。如果您还想使用它,请删除-字符,然后再尝试。

(- +。E)字符不会被这个函数

剥离

对于那些不想使用regex的人来说是一个更实用的方法:

$data = filter_var($data, FILTER_SANITIZE_NUMBER_INT);