我正在网站上实施简单搜索,现在我正在努力清理输入。我的计划是制作允许角色的白名单。我正在使用PHP,到目前为止我已经得到了当前的正则表达式:
preg_replace('/[^a-z0-9 -]/i', '', $s);
所以,我删除的不是字母数字或空格或连字符。
对于这种事情,是否存在普遍接受的白名单,还是仅仅依赖于应用程序?我将搜索书名,作者姓名和书籍模糊。
答案 0 :(得分:2)
2010 (A space odyssey)
怎么样? Giscard d`Estaing的自传怎么样? ......这通常无法回答,这取决于您的应用程序和数据结构。
您希望查看所选数据库的全文搜索功能,甚至是Sphinx等专业搜索设备。
明确您将首先使用什么引擎来实际执行搜索,并且您需要删除的内容的规则将变得更加清晰。
答案 1 :(得分:0)
Google有一些非常先进的搜索规则,但他们的基本规则是:
通常,忽略标点符号,包括@#$%^& *()= + [] \和其他特殊字符。
但是,Google会对常见搜索字词进行例外处理,例如C ++,C#或100美元。
如果您希望搜索功能与Google一样复杂,则可以针对上述标点符号制定规则,并有一些例外情况。但是,对于简单搜索,只需忽略Google通常忽略的字符。
答案 2 :(得分:0)
没有通用的正则表达式来解决这个问题。您的代码会删除许多您可能想要保留的内容,例如逗号,感叹号,(半)冒号和非英文字母。如果您有数据库中所有标题的完整列表,则应该能够编写一个脚本,该脚本将构建所有标题中找到的所有字符的列表。如果你的正则表达式删除了任何这些字符,那么你就有可能遇到问题(虽然通过这个测试并不意味着不会遇到问题)。
根据搜索其余部分的实现方式,您可以删除有效字符并仍然返回相关搜索结果。在这种情况下,您希望表达式允许非英语字符(因为您不想拆分单词),但您可能能够删除不在引号分隔短语内的所有标点符号。例如,搜索red haired
应该会为您提供搜索red-haired
加上一些额外费用后获得的所有结果。