如何在 Zend 框架中上传时验证文件名



我试图上传文件,我需要它只包含字母、数字和 _

这是我的代码

    $regex = new Zend_Validate_Regex('/^[a-zA-Z0-9_.]+$/i');
    $regex->setMessages(array(
        Zend_Validate_Regex::NOT_MATCH => 'NOT MATCH - File name can only contain letters, numbers and underscores',
        Zend_Validate_Regex::INVALID   => 'INVALID - File name can only contain letters, numbers and underscores',
        Zend_Validate_Regex::ERROROUS  => 'ERROR - File name can only contain letters, numbers and underscores'
    ));
    $file = new Zend_Form_Element_File('file');
    $file->setRequired(TRUE)
        ->setDestination($path)
        ->addValidator('Size', FALSE, array('min' => '10kB', 'max' => '100MB'))
        ->addValidator('Extension', FALSE, 'avi,mov,wmv,mpeg,flv,mpg,mp4')
        ->addValidator($regex)
        ->getValidator('Upload')->setMessage('No file selected');
    $file->removeDecorator('DtDdWrapper');
    $file->removeDecorator('HtmlTag');
    $file->getDecorator('Label')->setTag(NULL);

我希望这个文件通过:test_test.jpeg

但不是这个:test test.jpeg

我遇到的问题是,即使文件名正常,验证器仍然会抛出NOT_MATCH错误

我什至允许.,以防文件名是整个文件名字符串

有什么想法吗?

/^(.*/)?[a-zA-Z0-9_.]*?.[a-zA-Z0-9_]*?$/i
如果您

不需要扩展名,请删除"\."之后的所有内容。否则,这应该适用于完整路径名称和仅文件名称

最新更新