匹配除字母和数字以外的所有字符的正则表达式

11
我希望清理所有上传文件的文件名。我想删除除句点、字母和数字以外的所有字符。我不擅长正则表达式,所以想在这里寻求帮助。
有人可以向我展示如何组合它吗?我正在使用 PHP。

1
这取决于你所说的“字母”是什么意思。目前提出的解决方案只排除了 a-zA-Z,但是会匹配这些范围之外的字母,例如 é 等等。 - Bart Kiers
3个回答

13
$newfilename=preg_replace('/[^a-zA-Z0-9.]/','',$filename);

谢谢。这个有效。我还忘了加下划线。这个有效,但是它是否最优?[^a-zA-Z0-9.|_] - Timay
2
@Timay:如果你想匹配下划线,请使用[^a-zA-Z0-9._],或者更简单的方式是使用[^.\w] - kennytm
哇.. 只有这4个字符就可以匹配除数字和字母以外的所有内容? - Timay
1
@Timay:也许你应该多了解一下正则表达式(http://www.regular-expressions.info/)。 - kennytm
没错,我同意。虽然我很少用它,但它肯定不会有坏处。谢谢你的帮助 Kenny。 - Timay
显示剩余6条评论

1
s/[^.a-zA-Z\d]//g

这是一个使用RegExp的Perl表达式。在PHP中,您可以这样做:

$output = preg_replace('/[^.a-zA-Z\d]/', '', $input);

谢谢Kenny。这个也会匹配句号吗? - Timay
1
@Timay:符号“^”表示“除了任何字符”。之后的“.a-zA-Z\d”表示“句点、字母和数字”。因此,它将匹配所有不是句点、字母和数字的字符,然后将其删除。 - kennytm
谢谢你,Kenny。我现在要把这个插上。 - Timay
Kenny,那完全不起作用。例如,它无法匹配(*&^%^。 - Timay

0

尝试使用这个:

$cleanString = preg_replace('#\W#', '', $string);

它将删除除字母和数字以外的所有内容。


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