2016-03-10 2 views
0

Хотя массив $ _FILES не показан, это предназначено для загрузки файлов, у меня были проблемы с загрузкой файлов, поэтому я еще не смог получить часть [type] массива $ _FILES ... но это просто простая проблема, почему не эта функция работает ...Почему эта простая функция PHP preg_match() не работает?

<?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

В качестве альтернативы: [? Как получить расширение файла в PHP] (http://stackoverflow.com/q/10368217) – mario

+0

@mario Еще лучше ... – dgig

+0

@mario спасибо за того, что имеет отношение , однако мне все еще интересно, почему это не соответствует выше. Кроме того, я заявил, что еще не получил функцию загрузки, из-за того, что я хочу, чтобы файл был загружен, чтобы показать части [type] [size] ... Я имею в виду, когда я выгружаю загрузку, это просто говорит 0 для [size] и blank для [type] – janicehoplin

ответ

5

ли это:

$extension = "/mp3$/"; 

или

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

ONLINE EXAMPLE

Причина: вам нужны разделители, чтобы начинать и заканчивать ваше выражение (это косые черты, хотя может быть любым персонажем) и не может иметь ничего впереди или позади них. «$» Будет означать, найдите строку между разделителями в конце строки.

Вы можете сохранить период, избегая его (иначе это будет означать любой символ один раз, то есть testmp3 будет совпадением).

Но на самом деле лучший ответ, как было предложено в комментариях - php's pathinfo() - так как вы разбираете имя файла. Хотя в некоторых случаях вы можете выполнять другие тесты для обеспечения безопасности, например, проверить тип mimetype.

+0

спасибо, любопытно, что случилось с этим периодом? И если mp3 происходит более одного раза или зависит от регистра. Я видел, что \ i для чувствительного к регистру, я не пытаюсь установить чувствительность к регистру, поскольку имя файла может иметь .MP3 Я думаю, – janicehoplin

+0

Период не будет работать за пределами разделителей в любом случае, хотя вы могли бы его там избегая его (добавляется в ответ). – dgig

+2

Если имя файла может быть как строчным, так и прописным, тогда вы можете добавить 'i' в конец регулярного выражения ('/\. Mp3 $/i'). –

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

+1

Это также будет соответствовать 'mp3.jpg', что может не быть желательным поведением – andrewsi

+0

Вы правы andrewsi, я обновил свой ответ. Спасибо –

4

Если вы хотите сохранить период, убедитесь, что вы избежать.

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

Я хочу сохранить период, однако где-то я не читал, чтобы не избегать периодов, не могу найти, где я только что увидел, что – janicehoplin

+0

Я вижу, спасибо вам за ваши ответы – janicehoplin

+1

Точки имеют особое значение в регулярных выражениях (они соответствует любому символу, кроме разрывов строк). Если вы пытаетесь сопоставить буквальную точку, тогда вам нужно избежать ее, чтобы она не рассматривалась как специальный символ – georaldc

Смежные вопросы