Кто-нибудь знает, почему я получаю эту ошибку: preg_match() [function.preg-match]: Unknown modifier '(' используя этот метод: 
 function checkFBDateFormat($date) { if(preg_match ("/^([0-9]{2})/([0-9]{2})/([0-9]{4})$/", $date, $parts)){ if(checkdate($parts[2],$parts[1],$parts[3])) return true; else return false; } else { return false; } } 
Вы не избежали своего «/», и вы также не выполнили свои заявления if, пожалуйста, попробуйте следующее:
  function checkFBDateFormat($date) { if(preg_match("/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/", $date, $parts)){ if(checkdate($parts[2],$parts[1],$parts[3])) { return true; } else { return false; } } else { return false; } } echo var_dump(checkFBDateFormat('08/09/2012')); 
  Если первый символ, например, косая черта / определяется как разделитель для регулярного выражения.  Таким образом, ваше регулярное выражение является только частью ^([0-9]{2}) .  И все после второго коса признается модификаторами для регулярного выражения. 
  Если вы действительно хотите совпадение с чертой, используйте \/ чтобы избежать ее 
  У вас нет привязанного / в вашем шаблоне: 
 preg_match("/^([0-9]{2})/([0-9]{2})/([0-9]{4})$/" // ---------------------^ ^ // --------------------------------+ 
  / используется как разделитель, движок preg предполагает, что шаблон закончился, когда он встречает a, и ожидает, что следующий символ станет модификатором (например, i для случая игнорирования). 
  Вам следует избегать всех / в вашем шаблоне: 
 preg_match("/^([0-9]{2})\\/([0-9]{2})\\/([0-9]{4})$/" 
Или используйте другой разделитель:
 preg_match("@^([0-9]{2})/([0-9]{2})/([0-9]{4})$@" 
Поскольку вы используете слэш в регулярном выражении, нужно использовать другой разделитель, попробуйте:
 preg_match ("#^([0-9]{2})/([0-9]{2})/([0-9]{4})$#", $date, $parts) 
Вам нужно избегать вашей косой черты, например:
 if(preg_match ("/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/", $date, $parts)){ 
  Вы используете / как разделитель для своего выражения.  Тем не менее, это абсолютно не нужно 
 $parts = explode('/', $date); 
Еще лучше: http://php.net/datetime.createfromformat
  Чтобы дать вам представление о том, что происходит: регулярное выражение PCRE требует разделителя в начале и в конце самого шаблона.  Все после второго разделителя рассматривается как модификатор.  Таким образом, вы решили использовать / как разделитель (это всегда первый символ), поэтому ваш шаблон закончился сразу после /^([0-9]{2})/ .  Все следующее (которое ( сначала) рассматривается как модификатор, но ( не является существующим модификатором. 
Если вы хотите остаться с регулярным выражением, я рекомендую использовать другой разделитель, например
 ~^([0-9]{2})/([0-9]{2})/([0-9]{4})$~ #^([0-9]{2})/([0-9]{2})/([0-9]{4})$# 
  Просто прочитайте руководство по PCRE 
Два дополнительных комментария:
$parts , прежде чем использовать его 33/44/5678 , но отрицает 1/1/1970 Возможно, вы захотите рассмотреть возможность использования регулярных выражений вообще.
 <?php // simple example $timestamp = strtotime('12/30/2012'); if ($timestamp) { // valid date… Now do some magic echo date('r', $timestamp); }