Фильтр PHP, использующий preg_replace, чтобы разрешить только буквенно-цифровые символы и некоторые знаки препинания

У меня небольшая проблема с preg_replace.

Мне нужна функция, которая удаляет все символы, кроме [A-z][0-9] и .!?.

Я мог бы использовать preg_match, но это только проверяет строку, и я хочу удалить символы.

Это сделано для того, чтобы я не добавлял ненужные символы, такие как <p> и ;[[;[p;[, в META-тег описания.

Итак, функция должна сделать это:

;")<br>kk23?!brkk23?!

Любая помощь будет оценена: D


person Master345    schedule 14.08.2011    source источник
comment
я знаю, как использовать preg_match... мне не очень подходит preg_replace для фильтрации данных   -  person Master345    schedule 15.08.2011
comment
Как это возможно? Напишите вызов preg_match, соответствующий строке. Измените слово «совпадение» на «заменить» в имени функции. Добавьте второй параметр, который представляет собой пустую строку, на которую вы хотите заменить совпадающие символы. Тада, вы использовали preg_replace!   -  person Dan Grossman    schedule 15.08.2011


Ответы (5)


$string = ';")<br>kk23?!'; 
$new_string = preg_replace("/[^A-Za-z0-9.!?]/",'',$string);
echo $new_string;

Листья: буквы, цифры, пробелы, .!?


/* 3 choices. Pick one you like! */
$str = preg_replace("/[^A-Za-z0-9.!? ]/","",$str);
$str = preg_replace("/[^A-Za-z0-9.!?\s]/","",$str);
$str = preg_replace("/[^A-Za-z0-9.!?[:space:]]/","",$str);
person dang    schedule 14.08.2011
comment
ereg_replace() устарел.. preg_replace() было бы лучше. - person Floern; 15.08.2011
comment
Спасибо Флерн. Добавил еще несколько решений. - person dang; 15.08.2011
comment
я лично предпочитаю preg_match, потому что я слышал, что это намного безопаснее - person Master345; 15.08.2011
comment
Рад, что смог помочь :) Пожалуйста, отметьте этот вопрос как решенный, если все выглядит хорошо ;) - person dang; 15.08.2011

 $var=preg_replace('~[^A-Za-z0-9?.!]~','',$var);

Не забывайте, что A-Za-z и A-z — это не одно и то же.

person RiaD    schedule 14.08.2011
comment
@RiaD В чем разница между A-Za-z и A-z? - person qwerty; 12.08.2013
comment
@qwerty A-z означает все символы между A и z в таблице ASCII. Вы можете увидеть, например, ` и [ среди их - person RiaD; 12.08.2013

Быстрое решение также будет следующим:

if (preg_match('/^[\w\.]+$/', $str)) {
    echo 'Str is valid';
} else
    echo 'Str is invalid';

// строка содержит только символы от a до z, от A до Z, от 0 до 9 и _ (подчеркивание)

\w - matches [a-zA-Z0-9_]+

Надеюсь, поможет.

person Aditya P Bhatt    schedule 17.08.2017

Самый простой способ - просто сделать что-то похожее на: Просто добавьте символы после !, при необходимости убедитесь, что они экранированы.

$string = "<br>kk23?!";
$string = preg_replace('/[^A-Za-z0-9 \?!]/', '', $string);
person Ben    schedule 14.08.2011

Больше посещения этой страницы. Я думаю, что больше людей сталкиваются с той же проблемой. Лучший способ - попробовать себя и получить то, что вам нужно. Настройте свой или скопируйте и вставьте этот php и попробуйте:

$sample_input = '&&*9?><<script>}cat-<html>ch(_P.,,mE.:;xc##e*p32t.ion $e){di+-($e->ge69tMesPHP _f0sage()3);}';

$output = ereg_replace("[^..........]", "", $sample_input);        

echo "validate =".$output;

измените, заполнив это, чтобы получить то, что вы хотите:

 $output = ereg_replace("[^.........]", "", $sample_input);

Пример: если вам нужны только строчные буквы, сделайте так:

$output = ereg_replace("[^a-z]", $sample_input);

нижний регистр с пробелом:

 $output = ereg_replace("[^a-z ]", $sample_input);

и многое другое....., это простой метод проверки:

$username = ereg_replace("[^A-Z0-9_]", "", $username);
$fullname = ereg_replace("[^A-Za-z0-9., ]", "", $fullname);
$city     = ereg_replace("[^A-Za-z -]", "", $city);
$phone    = ereg_replace("[^0-9 +()-]", "", $phone);
$state    = ereg_replace("[^A-Za-z -]", "", $state);
$zipcode  = ereg_replace("[^0-9]", "", $zipcode);
$country  = ereg_replace("[^A-Za-z -]", "", $country);
$gender   = ereg_replace("[^mf]", "", $gender);

Попробуйте сами, надеюсь поможет...

person user3706926    schedule 03.10.2015