我需要清理一个字符串,并确保它只包含字母数字字符。我想出了以下代码,由于某种原因失败
$string = 'aaa`bbb!!';
$string = preg_replace("#[^a-zA-z0-9]*#", "", $string);
echo $string;die;
我收到的输出是aaa`bbb而我期待aaabbb。你能帮我解决这个问题。
答案 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库的开销。