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

时间:2016-03-10 21:59:44

标签: php

虽然没有显示$ _FILES数组,但这是用于文件上传,我在文件上传方面遇到了问题,所以我无法获得$ _FILES数组的[type]部分......但这是只是一个简单的问题,为什么这个功能不起作用......

   <?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();

    ?>

3 个答案:

答案 0 :(得分:5)

这样做:

 $extension = "/mp3$/";

$extension = "/\.mp3$/";

ONLINE EXAMPLE

原因是,你需要分隔符来开始和结束你的表达式(那些是斜线,虽然可以是任何字符)并且不能在它们之前或之后有任何东西。 &#34; $&#34;意思是,找到字符串末尾的分隔符之间的字符串。

你可以通过逃避它来保持句号(否则它将意味着任何一个字符,意味着testmp3将匹配)。

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

答案 1 :(得分:4)

如果你想保持这段时间,一定要逃避它。

$pattern = "/\.mp3$/";

答案 2 :(得分:2)

您的正则表达式中存在错误:

"./mp3/" => "/\.mp3$/"

结果:

<?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();

?>

ONLINE EXAMPLE