文本框不区分大小写

本文关键字:大小写 不区 文本 | 更新日期: 2023-09-27 17:58:07

我有一个文本框,用于根据数据表中的关键字进行研究。当表格显示时,所有搜索到的单词都以黄色突出显示。问题是,如果我搜索"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",它就不会起作用。我想要的是识别关键字并突出显示它,而不管大小写。

文本框不区分大小写

问题是string.Replace区分大小写。所以你需要一种不在乎情况的替代方法。不幸的是,没有办法使string.Replace不区分大小写。幸运的是,我们有regex:

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

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

当前方法更改输入字符串的大小写。我推荐一种不同的方法:

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>");

将打开

此测试测试应为高TESTjk点亮的TeS

进入

测试试验应为高试验jk点亮的TeS

而不是

这个测试试验应该是高的试验[/strong>jk点亮的tes