【问题标题】:Only allow English characters/letters/numbers and a few special characters [duplicate]只允许英文字符/字母/数字和一些特殊字符[重复]
【发布时间】:2013-04-26 07:10:24
【问题描述】:

我的问题是我正在从头开始制作一个小型搜索引擎,但是如果我用俄语/除英语之外的任何其他语言进行搜索,它就会变得一团糟。我希望有人能给我一个带有正则表达式的代码,它可以过滤掉(不仅仅是检测,自动过滤掉)俄语字母,或者除英文字母之外的任何其他字母,以及键盘特殊字符(-/:;()$& @“。 - 等等)。 稍后,我将为我的引擎实现不同的语言支持,但现在,我想完成引擎的基础。

提前致谢。

【问题讨论】:

  • 但是正则表达式是专为与您的情况完全一样的情况而设计的,您为什么不想使用它?
  • 如果没有正则表达式的替代品,我想它会没事的。我就是不会学习正则表达式,这对我来说似乎太复杂了。
  • @TillHelge 答案有一个正则表达式解决方案。
  • 不需要为此学习正则表达式 - 简单的复制和粘贴就足够了。
  • @HamZaDzCyber​​DeV True...因为这是合理的解决方案,没有真正的理由避免使用正则表达式。 ;) 你的解决方案确实很优雅。

标签: php string filter


【解决方案1】:

您可以创建一个允许的字符数组,然后过滤那些不允许的字符:

$allowed = array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9), array(' ', '+', '/', '-', '*', '.')); // Create an array of allowed characters

$string = 'This is allowed and this not é Ó ½ and nothing 123.'; // test string

$array = str_split($string); // split the string (character length = 1)

echo implode('', array_intersect($array, $allowed)); // Filter and implode !

Online demo.

【讨论】:

  • 这看起来很有趣。非常感谢,我试试看!
【解决方案2】:

为什么复杂?正则表达式将读取字符串的内容,所以最好自己做。读取字符串的字符并检查它们对应的 ASCII 值。

使用SplStorageObject 创建一个类似于哈希集的结构,并手动检查字符是否属于所需的集合。你可以将任何你想读的字符添加到这个集合中。

编辑 - 您可能也想使用正则表达式 - 类似于 [a-zA-Z0-9,./+&-] 但使用集合可以让您通过向已知字符添加更多字符来逐渐扩展搜索引擎- 字符集。

【讨论】:

    【解决方案3】:

    这可能不是最有效的方法,但确实有效:)

    $str='"it is a  simple test \ + - é Ó ½ 213  /:;()$&@".~" ';
    $result= preg_replace('/[^\s\w\+\-\\":;@\(\)\$\&\.\/]*/', '', $str);
    echo $result;
    

    但您需要添加每个特殊字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多