为什么这个简单的PHP preg_match()函数不起作用?

jan*_*lin 0 php

尽管未显示的$ _FILES数组,这是用于文件上传,我曾与文件上传的问题,所以我没能获得$ _FILES数组的[类型]的部分呢......但是这仅仅是一个简单的为什么这个功能不起作用的问题......

   <?php

    function getExtension() {
        // global $testFile;
        $extension = "./mp3/"; // also tried simply mp3 without the forwards slashes
        $testFile = "song.mp3";
        if(preg_match($extension, $testFile)) {
        echo "match found";
        }else {
        echo "no match found";
        }

    }
    getExtension();

    ?>
Run Code Online (Sandbox Code Playgroud)

dgi*_*gig 5

做这个:

 $extension = "/mp3$/";
Run Code Online (Sandbox Code Playgroud)

要么

$extension = "/\.mp3$/";
Run Code Online (Sandbox Code Playgroud)

在线示例

原因是,你需要分隔符来开始和结束你的表达式(那些是斜杠,尽管可以是任何字符)并且不能在它们之前或之后有任何东西."$"意味着,找到字符串末尾的分隔符之间的字符串.

你可以通过逃避它来保持期限(否则它将意味着任何一个角色,意味着testmp3匹配).

但实际上最好的答案是在评论中建议的 - php的pathinfo()- 因为你正在解析文件名.虽然在某些情况下,您可能希望进行其他安全性测试,例如检查mimetype.

  • 如果文件名可以是小写和大写,那么你可以将`i`添加到正则表达式的末尾(`/\.mp3 $/i`). (2认同)