2015-07-13 109 views
0

我遇到問題我無法修復此錯誤。我正在使用此上傳腳本來檢查MIME類型。是什麼原因警告:preg_match():未知修飾符'p'

警告:的preg_match():未知的修飾的 'p'
警告:的preg_match():未知的修飾的 'g'
警告:的preg_match():未知的修飾 '('

if (preg_match('/^image/p?jpeg$/i', $_FILES['upload']['type']) or 

    preg_match('/^image/gif$/i', $_FILES['upload']['type']) or 

    preg_match('/^image/(x-)?png$/i', $_FILES['upload']['type'])) 

{ 

    // Handle the file... 

} 

else 

{ 

    $error = 'Please submit a JPEG, GIF, or PNG image file.'; 

    include $_SERVER['DOCUMENT_ROOT'] . '/includes/error.html.php'; 

    exit(); 

} 

預先感謝您

+1

如果您使用*/*作爲起始分隔符,您必須在正則表達式中轉義**/** – donald123

回答

2

一切第二/(關閉delimiter)被認爲是flags後,使用另一分隔符如~

~^image/p?jpeg$~i 

或者定界符文字圖案內使用反斜線逃避它匹配:

/^image\/p?jpeg$/i 

最舒適的選擇一個分隔符,你不需要圖形內>不用擔心逃跑。頻繁使用的分隔符是/,~,#,@或甚至括號格式分隔符,如(模式)


側面說明


你可以全部三個preg_match結合使用alternation單一的一個:

if(preg_match('~^image/(?:gif|p?jpeg|(?:x-)?png)$~i', $_FILES['upload']['type'])) { ... } 

(?:開始非捕獲group。好測試:regex101.com

+0

您的意思是像這樣if(preg_match('/ \^image/p?jpeg $ /'',$ _FILES ['upload'] ['type'])或者 preg_match('/ \^^ preg_match('/ \^image /(x - )?png $/i',$ _FILES ['upload'] ['type'])) – jemz

+0

@jemz像這樣:'preg_match('〜^ image/p?jpeg $〜i'' ...或'preg_match('/^image \/p?jpeg $/i'' ... –

相關問題