-1

我非常抱歉问这个!有很多资源,Regex但我在使用它和理解文档方面简直糟糕透了。

这有点急。

我拥有一个用户可以上传文件的网站。最近,一位用户开始上传大量名称类似于以下内容的文件:

1538æŽä»£æ²«&曲婉婷对唱《我的歌声里》追忆罗纳尔多.flv

他正在做一些非常时髦的事情。

我一直在尝试构建一个可以正常工作并阻止用户上传具有奇怪名称的文件的正则表达式。我从另一个问题中找到了这个:

function isValid($str) {
return !preg_match('/[^A-Za-z0-9.#\\-$]/', $str);
}

问题是,这有点太严格了。它不允许有空格。

我需要编辑函数以允许spaces, dashes,$ signssingle quotes. 但仅此而已。

我怎样才能做到这一点?

非常感谢您的帮助!我为我糟糕的正则表达式知识道歉。

4

1 回答 1

1

要将单引号添加到 PHP 中的字符串(任何字符串),您需要通过在前面添加斜杠来“转义”它:

'\''
 ^- slash

这是必需的,否则 PHP 将无法理解字符串定义从哪里到哪里。

$和符号在-正则表达式的字符类中具有特殊含义,因此它们也需要某种转义。这又是一个\斜线,但是要在 PHP 单引号字符串中写一个斜线,它还需要另一个斜线:

'\\'

因此,要构建正则表达式,所有这些都需要放在一起(如果将破折号移动到字符类的末尾,它没有特殊含义):

'/[^A-Za-z0-9.# \\$\'-]/'
               ^ ^ ^- slash for the single quote
               | `- slashed slash for the $ sign
               `- space

我没有对此进行测试,但正如您所看到的,它可能会变得有点复杂,因为首先对 PHP 字符串进行了一些转义,然后对正则表达式模式进行了一些转义。

于 2012-08-28T06:27:42.630 回答