Hellraiser
Новичок
Проблема с регулярными выражениями...
Возникла такая проблема, требуется функция для введенного юзером выражения, которые бы вычищала из выражения все символы, кроме букв русского и латинского алфавита (как заглавных, так и маленьких), а также символов дефиса, ! ? @ точки и пробела. Символы переноса строки типа \n и \r тоже запрещены а также запрещены все виды кавычек включая и те что на букве "Ё". В общем все запрещено кроме того что выше написал.
Я написал функцию вот такую (насколько мне мои знания регулярок позволили):
но она мне не нравится, поскольку приходится перечислять все символы запрещенные, а все не перечислишь - есть гора хитрых символов которых на клавиатуре нет но их можно ввести или копирнуть из буфера в форму... хотелось бы функцию вида показанного ниже, но в ВЫРАЖЕНИИ которой стояло бы регулярное выражение, которое б отсеивало все то что не попадает под разрешенные символы и заносило в массив matches только те символы, которые есть в выражении и не противоречат разрешенным (чтоб потом вернуть строку из разрешенных пристутсвующих в выражении символов). Я смотрел примеры функций регулярок, но заточить их под свое никак не выходит - то matches пустой, то делает совсем не то что надо... Хелп!
Можно также что б все символы, которые не попадают под разрешенные, заменялись на пустые с помощью preg_replace. Тогда массив matches не нужен будет - все запрещенное заменил на пустое и вернем получившуюся строку...
Возникла такая проблема, требуется функция для введенного юзером выражения, которые бы вычищала из выражения все символы, кроме букв русского и латинского алфавита (как заглавных, так и маленьких), а также символов дефиса, ! ? @ точки и пробела. Символы переноса строки типа \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
}
PHP:
function del($f)
{
preg_match_all("ВЫРАЖЕНИЕ",$f,$matches);
// тут еще может какой код...
return "строка после удаления из нее всех неразрешенных символов";
}
Можно также что б все символы, которые не попадают под разрешенные, заменялись на пустые с помощью preg_replace. Тогда массив matches не нужен будет - все запрещенное заменил на пустое и вернем получившуюся строку...
PHP:
function del($f)
{
$f = preg_replace("ВЫРАЖЕНИЕ СО СПИСКОМ РАЗРЕШЕННЫХ СИМВОЛОВ КОТОРЫЕ НАДО ОСТАВИТЬ, А ВСЕ ОСТАЛЬНЫЕ ЗАМЕНИТЬ НА ПУСТЫЕ","",$f);
return $f;
}