Вы можете использовать preg_replace
с массивами шаблонов и замен;первый, чтобы удалить не алфавитно-цифровые символы, кроме _
, -
и /
, а второй, чтобы удалить все, кроме последнего в конце /
:
$string = 'controller_123/method///';
echo preg_replace(array('#[^\w/-]+#', '#/+$#'), array('', '/'), $string);
Вывод:
controller_123/method/
Демонстрация на 3v4l.org
Регулярное выражение можно улучшить, отметив, что мы хотим удалить все /
перед тем, которое стоит в конце строки, ииспользуя позитивный взгляд, чтобы соответствовать тем.Тогда все совпадения можно просто заменить пустой строкой:
$string = 'contr*@&oller_123////method///';
echo preg_replace('#[^\w/-]+|/(?=/+$)#', '', $string);
Вывод:
controller_123////method/
Демонстрация на 3v4l.org