删除空格和任何非字母数字的内容

jon*_*nie 6 php regex alphanumeric

我试图删除所有不是字母数字的东西,或者是一个带_的空格:

$filename = preg_replace("([^a-zA-Z0-9]|^\s)", "_", $filename);
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么,似乎没有用.我已经尝试了几种正则表达式组合......(而且我通常不是很聪明).

cdh*_*wie 11

试试这个:

$filename = preg_replace("/[^a-zA-Z0-9 ]/", "_", $filename);
Run Code Online (Sandbox Code Playgroud)


lhe*_*urt 7

$filename = preg_replace('~[\W\s]~', '_', $filename);
Run Code Online (Sandbox Code Playgroud)

如果我正确理解您的问题,您想要用'_'替换任何空格(\ s)或非字母数字(\ W)字符.这应该没问题.注意\ W是大写的,而不是小写的\ w,它将匹配字母数字字符.

  • `\ W`的含义因风格而异,但在PHP中,它匹配任何不是ASCII字符的字符,即`[A-Za-z0-9_]`.这包括ASCII空白字符(因此`\ s`是冗余的)和来自其他脚本的字母数字字符.即使重音拉丁字母被`\ W`视为非单词字符. (2认同)