警告的原因:preg_match():未知的修饰符' p'

时间:2015-07-13 09:17:48

标签: php regex preg-match

我遇到了麻烦我无法修复此错误。我正在使用此上传脚本来检查mime类型。

  

警告: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 个答案:

答案 0 :(得分:3)

第二个/(结束delimiter)后的所有内容都被视为flags。使用其他分隔符,例如~

~^image/p?jpeg$~i

或者匹配模式内的分隔符文字使用反斜杠转义它:

/^image\/p?jpeg$/i

选择分隔符非常舒服,在模式中不需要>不用担心逃跑。经常使用的分隔符为/~#@或甚至括号样式分隔符,例如(模式)


旁注

您可以使用alternation将所有三个preg_match合并为一个{<1}}:

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

(?:启动非捕获group。适合测试:regex101.com