文本框不起作用的大小写不敏感

时间:2016-07-22 07:46:58

标签: c#

我有一个文本框,用于通过数据表中的关键字进行研究。当表格显示时,所有搜索到的单词都以黄色突出显示。问题是如果我搜索"hello"并在数据库中写入"Hello""HELLO"这个词不会突出显示,我使用toLower()但它没有改变任何东西,有人可以给我一些想法吗?

string word = tbSearch.Text.ToLower().Replace("'", " ");

e.Row.Cells[2].Text = ((DataRowView)e.Row.DataItem).Row[2]
    .ToString()
    .ToLower()
    .Replace(tbSearch.Text, "<b class='highlighted'>" + tbSearch.Text + "</b>");

如果我以极小的方式进行研究,我尝试了它的代码,但是如果在研究中我写"HELLO"它将无效。我想要的是识别关键字并突出显示它无论如何。

2 个答案:

答案 0 :(得分:2)

问题是string.Replace区分大小写。所以你需要一种方法来替换不关心的情况。不幸的是,没有办法让string.Replace不区分大小写。幸运的是,我们有正则表达式:

var text = "This is my hello";
var searchText = "MY";

var result = 
  Regex.Replace
  (
    text, 
    Regex.Escape(searchText), 
    i => string.Format("<b class=\"highlighted\">{0}</b>", i.Value),
    RegexOptions.IgnoreCase
  );

Console.WriteLine(result); // This is <b class="highlighted">my</b> hello

由于您可能会多次使用相同的模式,因此您可能希望保留正则表达式的缓存编译实例,但这取决于您。

答案 1 :(得分:1)

当前方法更改输入字符串的大小写。我建议采用不同的方法:

public static string Highlight(string text, string highlight, string prepend, string append)
{
    StringBuilder result = new StringBuilder();
    int position = 0;
    int previousPosition = 0;

    while (position >= 0)
    {
        position = text.IndexOf(highlight, position, 
            StringComparison.InvariantCultureIgnoreCase);

        if (position >= 0)
        {
            result.Append(text.Substring(previousPosition, position - previousPosition));
            result.Append(prepend);
            result.Append(text.Substring(position, highlight.Length));
            result.Append(prepend);

            previousPosition = position + highlight.Length;
            position++;
        }
        else
        {
            result.Append(text.Substring(previousPosition));
        }
    }
    return result.ToString();
}

用这种方法,结果

string x = "This test Test TEST should be highTESTjk lighted TeS";
string y = Highlight(x, "test", "<b>", "</b>");

会转

  

此测试测试TEST应为highTESTjk点亮TeS

  

测试 测试 TEST 应该高 TEST jk点燃TeS

而不是

  

测试 测试 测试应该高测试 jk点亮测试