Проблема с регулярными выражениями...

Hellraiser

Новичок
Проблема с регулярными выражениями...

Возникла такая проблема, требуется функция для введенного юзером выражения, которые бы вычищала из выражения все символы, кроме букв русского и латинского алфавита (как заглавных, так и маленьких), а также символов дефиса, ! ? @ точки и пробела. Символы переноса строки типа \n и \r тоже запрещены а также запрещены все виды кавычек включая и те что на букве "Ё". В общем все запрещено кроме того что выше написал.

Я написал функцию вот такую (насколько мне мои знания регулярок позволили):

PHP:
function del($f)
{

  $f=str_replace("\n","",$f);
  $f=str_replace("\r","",$f);
  $f = str_replace("'" , "", $f);
  $f = str_replace('"' , "", $f);
  $f = str_replace('`' , "", $f);

  $f = preg_replace("/([=()№#;:*%^&<>_,~}{|+]|[\/]|[\\\\]|[[]|[]]|[$])/i","", $f);

  return $f

}
но она мне не нравится, поскольку приходится перечислять все символы запрещенные, а все не перечислишь - есть гора хитрых символов которых на клавиатуре нет но их можно ввести или копирнуть из буфера в форму... хотелось бы функцию вида показанного ниже, но в ВЫРАЖЕНИИ которой стояло бы регулярное выражение, которое б отсеивало все то что не попадает под разрешенные символы и заносило в массив matches только те символы, которые есть в выражении и не противоречат разрешенным (чтоб потом вернуть строку из разрешенных пристутсвующих в выражении символов). Я смотрел примеры функций регулярок, но заточить их под свое никак не выходит - то matches пустой, то делает совсем не то что надо... Хелп!

PHP:
function del($f)
{
  preg_match_all("ВЫРАЖЕНИЕ",$f,$matches);

  // тут еще может какой код...

  return "строка после удаления из нее всех неразрешенных символов";

}

Можно также что б все символы, которые не попадают под разрешенные, заменялись на пустые с помощью preg_replace. Тогда массив matches не нужен будет - все запрещенное заменил на пустое и вернем получившуюся строку...

PHP:
function del($f)
{

  $f = preg_replace("ВЫРАЖЕНИЕ СО СПИСКОМ РАЗРЕШЕННЫХ СИМВОЛОВ КОТОРЫЕ НАДО ОСТАВИТЬ, А ВСЕ ОСТАЛЬНЫЕ ЗАМЕНИТЬ НА ПУСТЫЕ","",$f);

  return $f;

}
 
Сверху