Нужно отфильтровать строку PHP

Нужно с помощью regexp сделать так, что 1) были только русские и английские буквы, цифры, пробелы и знаки !#$&() 2) не было английских букв рядом с русскими(при нахождении русская буква заменяется "#"

function filter($str){
    $pattern = '/[^a-zA-Z\d а-яёА-ЯЁ]/';
    $replacement = '';
    $str=preg_replace($pattern, $replacement, $str);

    $replacement = '\1#';
    $pattern = '/([a-zA-Z])([а-яёА-ЯЁ])/';
    $str=preg_replace($pattern, $replacement, $str);

    $pattern = '/([^а-яёА-ЯЁ])([a-zA-Z])/';
    $replacement = '#\2';
    $str=preg_replace($pattern, $replacement, $str);
    return $str;
}

Ответы (0 шт):