PHP:正则表达式从字符串替换除字母数字字符以外的所有内容

时间:2010-07-12 21:13:40

标签: php regex

我需要清理一个字符串,并确保它只包含字母数字字符。我想出了以下代码,由于某种原因失败

    $string = 'aaa`bbb!!';
    $string = preg_replace("#[^a-zA-z0-9]*#", "", $string);
    echo $string;die;   

我收到的输出是aaa`bbb而我期待aaabbb。你能帮我解决这个问题。

2 个答案:

答案 0 :(得分:10)

它应该是大写Z:

preg_replace("#[^a-zA-Z0-9]*#", "", $string);

当您编写A-z时,它表示A(ASCII值65)和z之间的所有字符(ASCII值122)。这包括反引号(ASCII值96)加上你不想要的其他几个(下划线,方括号,反斜杠和波浪号)。

您还可以使用+代替*来保存,用空字符串重复替换空字符串。

答案 1 :(得分:3)

我认为*是不必要的,您可以使用\W进行简化。试试以下内容:

$string = preg_replace("/[\W_]/", "", $string);

此外,如果您只想验证 - 请查看ctype_alnum。它避免了RegEx库的开销。