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

时间:2010-03-18 20:18:43

标签: php regex filter multilingual

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

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

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

,这适用于英文文本。

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

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

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

这是常见问题,俄语字母无法被\ w模式识别,因此可以使用

$ allowed =“ - +?!,。;:\ w \sа-я”;