文本框不区分大小写
本文关键字:大小写 不区 文本 | 更新日期: 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