2015-07-13 110 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'' ... –

相关问题