Мой PHP-Fu не так силен, но я подозреваю, что /-a-z
интерпретируется как диапазон символов от /
до z
(и обратите внимание, что числа сразу следуют за косой чертой в ASCII), так что, возможно, выхочу это:
$text = preg_replace('/[^\\/\-a-z\s]/i', '', $text);
Я просто добавил обратную косую черту, чтобы избежать (иногда) особого значения "-" в классе символов регулярного выражения.