【问题标题】:How can I properly sanitize the search string in C# without reducing the search performance?如何在不降低搜索性能的情况下正确清理 C# 中的搜索字符串?
【发布时间】:2016-02-10 15:21:19
【问题描述】:

我需要清理用户的输入字符串,因为我稍后在 OLEDB 查询中使用该字符串来索引文档存储库以查找匹配的文件、描述等。问题是我不能在查询中使用包含特殊字符的字符串在CONTAINS 语句中。

有没有比我正在做的更好的方法来消毒而不降低准确性?

我目前正在做的是获取搜索字符串,并使用正则表达式对其进行验证:[^0-9a-zA-Z\s\/\._-]+ 并将其替换为空字符串以删除搜索字符串中的任何特殊字符。

我的问题是某些文件和描述包含特殊字符,如 & 和 $,如果我不允许任何类型的特殊字符,搜索精度会下降。有没有更有效的方法来做到这一点?

【问题讨论】:

    标签: c# regex search oledb windows-search


    【解决方案1】:

    使用正则表达式绝对是正确的方法。我认为此任务不需要任何其他库特定函数或任何第三方库,或者他们可以通过使用正则表达式来提高性能。 无论如何,几点:- 允许描述中可能出现的特殊字符(不要通过正则表达式将它们丢弃),排除其余字符。但是我假设您在这里处于循环状态,“包含”不会使用特殊字符,但您需要一些特殊字符。如果是这种情况,那么您可以继续编写一个本地函数,该函数完全执行包含的操作,减去您需要的某些特定特殊字符的检查。使用本地函数代替 CONTAINS 进行查询。除了这个,我想不出任何其他明显的方法。 或者,彻底检查整个搜索逻辑并使用将保持唯一且无特殊字符的键/字段进行搜索。无论如何,我不认为根据描述在 DB 中搜索文件是一个绝妙的主意。

    【讨论】:

      猜你喜欢
      • 2015-03-04
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多