2015-04-07 24 views
1

試圖修復突出顯示不區分大小寫的關鍵字搜索結果。這裏是斷碼:使用ColdFusion忽略大小寫突出顯示

replaceNoCase(text, keyword, '<font style="background-color:yellow;">#keyword#</font>', 'all') 

當然,問題是,在文本中的關鍵字的情況下被更改爲任何用戶輸入。

這是PHP case insensitive highlighting in php中的解決方案,但我不知道使用ColdFusion的REReplaceNoCase函數訪問搜索文本中的匹配值的方法。任何想法如何解決這個問題?

+1

1)考慮使用'<跨度類= 「突出顯示」>'的方法來代替。 2)你想要大寫還是小寫'keyword'? –

+0

突出顯示的內容將在哪裏查看?僅在線?如果是這樣,你可能會有更好的運氣使用JavaScript庫來突出顯示它之前元素中的單詞。這是我使用的。 http://bartaz.github.io/sandbox.js/jquery.highlight.html –

回答

0

的ColdFusion

replaceNoCase(text, keyword, '<span style="highlight">#keyword#</span>', 'all') 

CSS

.highlight { 
    background-color:yellow; 
    text-transform: capitalize; 
    } 

的利用將會使第一個字母大寫。

你可能想

replaceNoCase(text, keyword, '<span style="highlight">#lcase(keyword)#</span>', 'all') 
+0

對不起,我猜我不清楚......關鍵字需要在突出顯示時保留原文中的大小寫。目前,無論用戶輸入什麼大寫字母,都會替換原始文本。 –

0

你試過嗎?但它涉及到一些布爾邏輯。

編輯:不起作用。

<cfset keyword = "batman"> 
<cfset text = "SOMETHING BATMAN SOMETHING."> 
<cfoutput> 
    #(FindNoCase(keyword, text))? ReplaceNoCase(text, keyword, '<font style="background-color:yellow;">' & Mid(text, FindNoCase(keyword, text), Len(keyword)) & '</font>', 'all') : text# 
</cfoutput> 
+0

當關鍵字多次出現時,您是否自己嘗試過? –

+0

嗯,對,我應該可能使用了替換方法。 :( – Kevin

1

像你說,reReplace只會用你輸入的任何文本(大小寫和全部)替換你的文本。這就是我會做,而不是:

  1. 使用管道作爲分隔符(因爲 管道在普通文本很少使用)
  2. 循環每一個項目的列表
  3. 上執行的情況下,將文本轉換到列表對列表項目不敏感搜索
  4. 如果列表項匹配,則創建一個新變量,該變量會在當前項目前加上 ,並在後面加上一個 結束範圍標記(這會保留文本的當前案例而不是 比替換它搜索文本)
  5. 保存新的變量在當前列表中的位置
  6. 當循環完成後,用空格

這裏有一個快速和骯髒的要點更換管道。試試吧,看看它是否適合你: https://gist.github.com/kriskorsmo/6d02e06bc4a8483b3341

這裏是它在我的博客上現場演示: kriskorsmo.com/examples/highlighting。cfm

我在那裏爲你創建了一個簡單的「高亮」功能。它有兩個參數 - 關鍵字和originalText - 並返回原始文本,並突出顯示關鍵字。

******甚至更好****** 有在CFLib.org一個UDF - http://www.cflib.org/udf/Highlight

+1

如果你打算創建一個列表,'chr(30)'將是一個比管道更好的分隔符,它永遠不會被使用 –

+0

我在http://www.joecolantonio.com/2011/07/上看到26/qtp-ascii-chr-code-chart/that'chr(30)'是'Record Separator'。聽起來比我多年來一直使用的逗號,管道和波形符號好很多 –