我非常抱歉问这个! Regex
有很多资源,但我使用它并理解文档非常糟糕。
这有点紧急。
我拥有一个用户可以上传文件的网站。 Recenlty,用户开始上传大量名称与此类似的文件:
1538æŽä»£æ²«&曲婉婷对唱《我的æŒå£°é‡Œã€‹è¿½å¿†ç½—纳尔多.flv
他正在做一些非常时髦的事情。
我一直在尝试构建一个能正常工作的正则表达式,并阻止用户上传带有奇怪名称的文件。我从另一个问题中找到了这个:
function isValid($str) {
return !preg_match('/[^A-Za-z0-9.#\\-$]/', $str);
}
问题是,这有点太严格了。它不允许空格。
我需要编辑该功能以允许spaces
,dashes
,$ signs
和single quotes
。但不仅如此。
我该怎么做?
非常感谢您的帮助!我为我可怕的正则表达式知识道歉。
答案 0 :(得分:1)
要在PHP中将单引号添加到字符串(任何字符串),您需要通过在前面添加斜杠来“转义”它:
'\''
^- slash
这是必要的,因为否则PHP无法理解字符串定义的位置。
$
和-
符号在正则表达式中的字符类中具有特殊含义,因此它们也需要某种转义。这又是一个\
斜杠,但是要在PHP单引号字符串中写一个斜杠,它还需要另一个斜杠:
'\\'
因此,为了构建正则表达式,所有这些都需要集合在一起(如果你将短划线移动到字符类的末尾它没有特殊含义):
'/[^A-Za-z0-9.# \\$\'-]/'
^ ^ ^- slash for the single quote
| `- slashed slash for the $ sign
`- space
我没有对此进行测试,但正如您所看到的,它可能会变得有点复杂,因为首先有一些PHP字符串的转义,然后有一些转义为正则表达式模式。