Php 使用preg_replace删除所有非字母数字字符

Php 使用preg_replace删除所有非字母数字字符,php,regex,preg-replace,Php,Regex,Preg Replace,如何在PHP中从字符串中删除所有非字母数字字符 这是我目前正在使用的代码: $url = preg_replace('/\s+/', '', $string); 它只替换空格 $url = preg_replace('/[^\da-z]/i', '', $string); 看起来是可行的,实际上这个例子是在关于preg_replace的PHP文档中。首先,我想这样做 $alpha = '0-9a-z'; // what to KEEP $regex = sprintf('~[^%s]++~i

如何在PHP中从字符串中删除所有非字母数字字符

这是我目前正在使用的代码:

$url = preg_replace('/\s+/', '', $string);
它只替换空格

$url = preg_replace('/[^\da-z]/i', '', $string);

看起来是可行的,实际上这个例子是在关于preg_replace的PHP文档中。首先,我想这样做

$alpha = '0-9a-z'; // what to KEEP
$regex = sprintf('~[^%s]++~i', preg_quote($alpha, '~')); // case insensitive

$string = preg_replace($regex, '', $string);
$str = 'qwerty!@#$@#$^@#$Hello%#$';

$outcome = preg_replace("/[^a-zA-Z0-9]/", "", $str);

var_dump($outcome);
//string(11) "qwertyHello"

希望这有帮助

不确定为什么没有其他人提出这一建议,但这似乎是最简单的正则表达式:

preg_replace("/\W|_/", "", $string)
您也可以在这里看到它的作用:

您可以使用

$url = preg_replace('/[^\da-z]/i', '', $string);
您可以对unicode字符使用

$url = preg_replace("/[^[:alnum:][:space:]]/u", '', $string);

请记住,这将保留下划线,因为它们被视为单词字符,并保留空格。我不知道下划线,但它不会保留空格。@mario的可能副本:这有点不同,因为它处理Unicode。我确信存在一个完美的复制品……最简单和有效的复制品可能同时是
preg\u replace(“/[\W\u]+/”,“”,$string)
。如果其他人一眼就被Xeoncross的评论搞糊涂了,他的观点是答案不支持Unicode字符。但Xeoncross链接中的解决方案确实如此。
$url = preg_replace("/[^[:alnum:][:space:]]/u", '', $string);