Просто убежать от него:
return ( ! preg_match("/^([-a-z0-9_\n\r%$#., \/])+$/i", $str)) ? FALSE : TRUE;
или изменить разделитель регулярных выражений:
return ( ! preg_match("~^([-a-z0-9_\n\r%$#., /])+$~i", $str)) ? FALSE : TRUE;
Вы можете упростить как:
return preg_match("~^[-\w\n\r%$#., /]+$/", $str);