替换字符串中除字母数字、连字符、句点和下划线以外的所有内容

Replacing everything other than alphanumeric, hyphen, period and underscore in a string

这是我目前用来清理带有特殊字符的文件名的方法。基本上,它应该替换除以下以外的所有内容:

虽然看起来可行,但我不确定 _-。是在正则表达式中使用它的正确方法。

- 里面的字符 class 表示范围,例如0-9。所以,如果你想把它放在中间,你应该把它放在最前面,最后或者转义它。

还有\w => [A-Za-z0-9_]

终于可以使用这个正则表达式了

[^\w.-]

Regex Demo

PHP代码

$re = "/[^\w.-]/"; 
$str = "A\'skljdsg\\sk//dgj@@@////#``flkl_dfd-_-sfsfs-fk kgj.docx"; 

$result = preg_replace($re, "", $str);

Ideone Demo

如果您还想包括 space,请使用

[^\w. -]

如果你在中间使用连字符 - 你必须用斜杠转义:

preg_replace("/[^a-zA-Z0-9_\-.\s]/", "", "A\'skljdsg\\sk//dgj@@@////#``flkl_dfd-_-sfsfs-fk kgj.docx");

或者放在最后:

"/[^a-zA-Z0-9_.\s-]/"