регулярное выражение для фильтрации всех символов, кроме белого списка, из многоязычной строки - PullRequest
1 голос
/ 18 марта 2010

Я пытаюсь удалить строку из окна поиска на многоязычном сайте.

Обычно я бы использовал регулярное выражение вроде:

$allowed = "-+?!,.;:\w\s";
$txt_search = preg_replace("/[^" . $allowed . "]?(.*?)[^" . $allowed . "]?/iu", "$1", $_GET['txt_search']);

и это прекрасно работает для текстов на английском языке.

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

Как очистить строку, сохранив «нормальные тексты» на языке оригинала?

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

Ответы [ 2 ]

6 голосов
/ 19 марта 2010

вы можете использовать \ p {LN} [\p{L}\p{N}] вместо \ w, см. http://www.php.net/manual/en/regexp.reference.unicode.php

1 голос
/ 18 марта 2010

Обычно проблема заключается в том, что русские буквы не распознаются шаблоном \ w, поэтому вы можете использовать

$ позволено = "- +?!,.;: \ W \ sа-я";

...