代码之家  ›  专栏  ›  技术社区  ›  jeroen

从多语言字符串中筛选除白名单以外的所有字符的regex

  •  1
  • jeroen  · 技术社区  · 14 年前

    我正试图清除来自多语言站点上搜索框的字符串。

    通常我会使用类似regex的:

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

    这对英语课本很有用。

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

    如何在保留原始语言的“正常文本”的同时清除字符串?

    我虽然想切换到黑名单(虽然我不想…)但是此时regex完全破坏了所有原始输入。

    2 回复  |  直到 14 年前
        1
  •  6
  •   user187291    14 年前

    你可以用 \p{Ln} [\p{L}\p{N}] 而不是\w,请参见 http://www.php.net/manual/en/regexp.reference.unicode.php

        2
  •  1
  •   dchekmarev    14 年前

    常见的问题是,俄语字母不能被模式识别,因此您可以使用

    $allowed=“-+?!,.;:\w\s_