Почему пустое регулярное выражение всегда возвращает true?
Потому что данное регулярное выражение трактуется как "строка содержит пустую подстроку" и является истинным для любой строки. Выражение "строка является пустой" выглядит как /^$/, но гораздо проще проверить обычным равенством ($url === '').
<?php
$uri = 'contacts';

var_dump(preg_match('//', $uri, $out)); // true
var_dump($out);

Потому что при такой постановке задачи вы находите строку нулевой длины в исходной строке
int(1)
array(1) {
  [0]=>
  string(0) ""
}