今日,碰到一个问题:如何在网页中高亮显示不区分大小写的关键字
例如:文本abcaBcabCaBCabcaBCa,关键字bc,在不区分大小写的情况,一共有6个匹配项。
则在网页中显示的是abcaBcabCaBCabcaBCa。
很多人,想到是replace函数。但是在c# 中replace函数无法解决字母大小写问题。
例如示例上看,bc,Bc,bC,BC都被搜索到了,却不能统一替换为一个文本
以上文字转自大牛“万仓一黍“的文章--”高亮显示不区分大小写的关键字——ASP“。
但是他的文章写得是ASP版本,今天我写得是C#版本;下面说说解决办法。
解决办法:运用 IndexOf
IndexOf(String, Int32, StringComparison)
指定的字符串在当前 String 对象中的第一个匹配项的索引。
参数
- value
- 类型: System.
String
要搜寻的字符串。
- startIndex
- 类型: System.
Int32
搜索起始位置。
- comparisonType
- 类型: System.
StringComparison
指定搜索规则的枚举值之一。 - (OrdinalIgnoreCase:使用序号排序规则并忽略被比较字符串的大小写,对字符串进行比较。)
- 代码
-
1 /// <summary> 2 /// 高亮查找关键字。 3 /// </summary> 4 /// <param name="str">文本。</param> 5 /// <param name="keyword">关键字</param> 6 /// <returns>含高亮标识的文本。</returns> 7 /// <remarks> 8 /// 1、字母不区分大小写。 9 /// 2、CssClass 名称为 highlight。 10 /// </remarks> 11 private string HighLightKeyword(string str, string keyword) 12 { 13 int index; 14 var startIndex = 0; 15 const string highLightBegin = "<span class='highlight'>"; 16 const string highLightEnd = "</span>"; 17 var length = highLightBegin.Length + keyword.Length; 18 var lengthHighlight = length + highLightEnd.Length; 19 20 while ((index = str.IndexOf(keyword, startIndex, StringComparison.OrdinalIgnoreCase)) > -1) 21 { 22 str = str.Insert(index, highLightBegin).Insert(index + length, highLightEnd); 23 startIndex = index + lengthHighlight; 24 } 25 26 return str; 27 }
欢迎大家来吐糟!!!