正则表达式从多语言字符串中筛选所有白名单字符

jer*_*oen 1 php regex multilingual filter

我正在尝试清理来自多语言网站上的搜索框的字符串.

通常我会使用正则表达式:

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

这适用于英文文本.

但是,现在我需要做同样的事情,输入的文本可以是任何语言(现在是俄语,将来是中文).

如何在保留原始语言的"普通文本"的同时清理字符串?

我虽然要切换到黑名单(虽然我不是......)但是此刻正则表达式完全破坏了所有原始输入.

use*_*291 6

您可以使用\ p {LN} [\p{L}\p{N}]代替\ w,请参阅http://www.php.net/manual/en/regexp.reference.unicode.php