我正在对文件的名称进行一些检查,但即使我在regex101.com上测试时我的正则表达式有效,一旦我将它放在真实环境中,它总是不会返回任何内容......
我有一个文件名" abc123.jpg"存储在$ _FILES ["图片"] ["名称"]
如果我这样做:
str_replace('a','',$_FILES["picture"]["name"])
我得到了' bc123.jpg' 如果我这样做:
preg_replace('a','',$_FILES["picture"]["name"])
我得到'' (无)。
这怎么可能? 我错过了什么?
最终我的正则表达式是:
/[^\w\.\-]/g
删除除下划线,短划线和点之外的所有非字母数字字符(在文件类型扩展名之前需要)
答案 0 :(得分:1)
您忘记使用regex delimiters。我建议你用
$s = preg_replace('~[^\w.-]+~', '', $s);
^ ^
请参阅regex demo。在这里,我使用~
作为正则表达式分隔符。
请注意,字符类末尾的-
被视为连字符,不必进行转义。字符类中的.
始终被视为文字点,也不需要转义它。由于您要删除这些符号,最好在连续的块中删除它们,因此,我建议在字符类之后添加+
量词,以匹配1个或多个匹配项。
请注意,PHP正则表达式不支持/g
修饰符,默认情况下preg_replace
会替换所有非重叠的事件。