Regex для удаления всего, кроме слов и цифр (и латинских букв) - PullRequest
0 голосов
/ 08 августа 2011

Я пытаюсь очистить строку сообщения, используемую в запросе ajax (sanitize перед запросом db), чтобы разрешить только буквенно-цифровые символы, пробелы (1 на слово, не кратные), могут содержать «-» и латинские символы, такие как «ç» и "é" безуспешно, кто-нибудь может помочь или указать мне правильное направление?

Это регулярное выражение, которое я использую до сих пор:

$string = preg_replace('/^[a-z0-9 àáâãäåçèéêëìíîïðñòóôõöøùúû-]+$/', '', mb_strtolower(utf8_encode($_POST['q'])));

Спасибо.

Ответы [ 3 ]

4 голосов
/ 08 августа 2011
$regEx = '/^[^\w\p{L}-]+$/iu';

\w - соответствует буквенно-цифровым цифрам

\p{L} - соответствует одной кодовой точке Unicode в категории «Буквы» (см. Раздел Unicode Categories section здесь).

- в конце класса символов соответствует одному дефису.

^ в классах символов отменяет класс символов, так что регулярное выражение будет соответствоватьпротивоположность класса символов (все, что вы делаете , а не указываете).

+ вне класса символов говорит, что соответствует 1 или более символов

^ и$ вне класса символов заставит движок принимать только совпадения, которые начинаются в начале строки и продолжаются до конца строки.

После шаблона модификатор i сообщает игнорироватьcase и u сообщает механизму сопоставления с образцом, что мы собираемся отправлять данные UTF8 по-своему, а существующий модификатор g был удален, так как в PHP это не нужно (вместо этого глобальное сопоставлениев зависимости от того, какая функция сопоставления вызывается)

2 голосов
/ 08 августа 2011
$string = mb_strtolower(utf8_encode($_POST['q'])));
$string = preg_replace('/[^a-z0-9 àáâãäåçèéêëìíîïðñòóôõöøùúû-]+/g', '', $string);
$string = preg_replace('/ +/g', ' ', $string);

Почему бы просто не использовать mysql_real_escape_string?

0 голосов
/ 08 августа 2011
$string = preg_replace('/[^a-z0-9 àáâãäåçèéêëìíîïðñòóôõöøùúû\-]/u', '', mb_strtolower(utf8_encode($_POST['q']), 'UTF-8'));
$string = preg_replace( '/ +/', ' ', $string );

должен сделать свое дело. Обратите внимание, что

  • класс символов отменяется путем помещения ^ внутрь класса символов
  • вам нужен флаг u при работе со строками Юникода в шаблоне или в теме
  • Лучше явно указывать набор символов в функциях mb_ *, так как в противном случае они будут зависеть от настроек системы по умолчанию, а это может быть не UTF-8.
  • символ дефиса, который необходимо экранировать (\ - вместо - в конце класса вашего персонажа)
...